{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Mnist分类任务：\n",
    "\n",
    "- 网络基本构建与训练方法，常用函数解析\n",
    "\n",
    "- torch.nn.functional模块\n",
    "\n",
    "- nn.Module模块\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 读取Mnist数据集\n",
    "- 会自动进行下载"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pathlib import Path\n",
    "import requests\n",
    "\n",
    "# DATA_PATH = Path(\"data\")\n",
    "# PATH = DATA_PATH / \"mnist\"\n",
    "\n",
    "# PATH.mkdir(parents=True, exist_ok=True)\n",
    "\n",
    "URL = \"http://deeplearning.net/data/mnist/\"\n",
    "FILENAME = \"mnist.pkl.gz\"\n",
    "\n",
    "# if not (PATH / FILENAME).exists():\n",
    "#         content = requests.get(URL + FILENAME).content\n",
    "#         (PATH / FILENAME).open(\"wb\").write(content)\n",
    "if not FILENAME:\n",
    "        content = requests.get(URL + FILENAME).content\n",
    "        FILENAME.open(\"wb\").write(content)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pickle\n",
    "import gzip\n",
    "\n",
    "with gzip.open((PATH / FILENAME).as_posix(), \"rb\") as f:\n",
    "        ((x_train, y_train), (x_valid, y_valid), _) = pickle.load(f, encoding=\"latin-1\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "784是mnist数据集每个样本的像素点个数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.19921875, 0.62109375, 0.98828125,\n",
       "        0.62109375, 0.1953125 , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.1875    ,\n",
       "        0.9296875 , 0.984375  , 0.984375  , 0.984375  , 0.92578125,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.2109375 , 0.88671875, 0.98828125, 0.984375  ,\n",
       "        0.93359375, 0.91015625, 0.984375  , 0.22265625, 0.0234375 ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.0390625 , 0.234375  , 0.875     ,\n",
       "        0.984375  , 0.98828125, 0.984375  , 0.7890625 , 0.328125  ,\n",
       "        0.984375  , 0.98828125, 0.4765625 , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.63671875, 0.984375  , 0.984375  , 0.984375  , 0.98828125,\n",
       "        0.984375  , 0.984375  , 0.375     , 0.73828125, 0.98828125,\n",
       "        0.65234375, 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.19921875, 0.9296875 , 0.98828125,\n",
       "        0.98828125, 0.7421875 , 0.4453125 , 0.98828125, 0.890625  ,\n",
       "        0.18359375, 0.30859375, 0.99609375, 0.65625   , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.1875    ,\n",
       "        0.9296875 , 0.984375  , 0.984375  , 0.69921875, 0.046875  ,\n",
       "        0.29296875, 0.47265625, 0.08203125, 0.        , 0.        ,\n",
       "        0.98828125, 0.94921875, 0.1953125 , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.1484375 , 0.64453125, 0.98828125, 0.91015625,\n",
       "        0.8125    , 0.328125  , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.98828125, 0.984375  ,\n",
       "        0.64453125, 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.02734375, 0.6953125 ,\n",
       "        0.984375  , 0.9375    , 0.27734375, 0.07421875, 0.109375  ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.98828125, 0.984375  , 0.76171875, 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.22265625, 0.984375  , 0.984375  , 0.24609375,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.98828125,\n",
       "        0.984375  , 0.76171875, 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.7734375 ,\n",
       "        0.98828125, 0.7421875 , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.99609375, 0.98828125, 0.765625  ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.296875  , 0.9609375 , 0.984375  , 0.4375    ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.98828125, 0.984375  , 0.578125  , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.33203125,\n",
       "        0.984375  , 0.8984375 , 0.09765625, 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.02734375, 0.52734375, 0.98828125, 0.7265625 ,\n",
       "        0.046875  , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.33203125, 0.984375  , 0.87109375,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.02734375, 0.51171875,\n",
       "        0.984375  , 0.87890625, 0.27734375, 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.33203125, 0.984375  , 0.56640625, 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.1875    , 0.64453125, 0.984375  , 0.67578125, 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.3359375 , 0.98828125,\n",
       "        0.87890625, 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.4453125 , 0.9296875 , 0.98828125,\n",
       "        0.6328125 , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.33203125, 0.984375  , 0.97265625, 0.5703125 ,\n",
       "        0.1875    , 0.11328125, 0.33203125, 0.6953125 , 0.87890625,\n",
       "        0.98828125, 0.87109375, 0.65234375, 0.21875   , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.33203125,\n",
       "        0.984375  , 0.984375  , 0.984375  , 0.89453125, 0.83984375,\n",
       "        0.984375  , 0.984375  , 0.984375  , 0.765625  , 0.5078125 ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.109375  , 0.77734375, 0.984375  ,\n",
       "        0.984375  , 0.98828125, 0.984375  , 0.984375  , 0.91015625,\n",
       "        0.56640625, 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.09765625, 0.5       , 0.984375  , 0.98828125,\n",
       "        0.984375  , 0.55078125, 0.14453125, 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        ], dtype=float32),\n",
       " array([5, 0, 4, 1, 9, 2, 1, 3, 1, 4], dtype=int64))"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train[1],y_train[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(50000, 784)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot\n",
    "import numpy as np\n",
    "\n",
    "pyplot.imshow(x_train[1].reshape((28, 28)), cmap=\"gray\")\n",
    "print(x_train.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"./img/4.png\" alt=\"FAO\" width=\"790\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"./img/5.png\" alt=\"FAO\" width=\"790\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "注意数据需转换成tensor才能参与后续建模训练\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train, y_train, x_valid, y_valid = map(\n",
    "    torch.tensor, (x_train, y_train, x_valid, y_valid)\n",
    ")\n",
    "#x_train[0,:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[0., 0., 0.,  ..., 0., 0., 0.],\n",
      "        [0., 0., 0.,  ..., 0., 0., 0.],\n",
      "        [0., 0., 0.,  ..., 0., 0., 0.],\n",
      "        ...,\n",
      "        [0., 0., 0.,  ..., 0., 0., 0.],\n",
      "        [0., 0., 0.,  ..., 0., 0., 0.],\n",
      "        [0., 0., 0.,  ..., 0., 0., 0.]]) tensor([5, 0, 4,  ..., 8, 4, 8])\n",
      "torch.Size([50000, 784])\n",
      "tensor(0) tensor(9)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\admin\\AppData\\Local\\Temp\\ipykernel_10160\\3405087846.py:3: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
      "  x_train, y_train, x_valid, y_valid = map(\n"
     ]
    }
   ],
   "source": [
    "import torch\n",
    "\n",
    "x_train, y_train, x_valid, y_valid = map(\n",
    "    torch.tensor, (x_train, y_train, x_valid, y_valid)\n",
    ")\n",
    "n, c = x_train.shape\n",
    "x_train, x_train.shape, y_train.min(), y_train.max()\n",
    "print(x_train, y_train)\n",
    "print(x_train.shape)\n",
    "print(y_train.min(), y_train.max())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### torch.nn.functional 很多层和函数在这里都会见到\n",
    "\n",
    "torch.nn.functional中有很多功能，后续会常用的。那什么时候使用nn.Module，什么时候使用nn.functional呢？一般情况下，如果模型有可学习的参数，最好用nn.Module，其他情况nn.functional相对更简单一些"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch.nn.functional as F\n",
    "\n",
    "loss_func = F.cross_entropy\n",
    "\n",
    "def model(xb):\n",
    "    return xb.mm(weights) + bias"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[-1.8182,  0.8633,  0.1843,  ..., -1.1480,  1.2668, -1.5020],\n",
       "        [-1.8544,  0.3071,  1.1579,  ...,  0.5149,  0.8040, -0.7254],\n",
       "        [-1.2570, -0.9988, -0.4387,  ...,  0.4658,  0.3108,  1.0930],\n",
       "        ...,\n",
       "        [ 1.7804,  0.0105, -0.8581,  ...,  1.1513, -0.3310,  1.0992],\n",
       "        [ 1.8193, -0.6362,  0.7927,  ...,  1.3101, -1.2359, -0.9623],\n",
       "        [ 0.8249,  0.4481, -1.0350,  ...,  0.1079, -1.3365, -0.8316]],\n",
       "       requires_grad=True)"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "weights = torch.randn([784, 10], dtype = torch.float,  requires_grad = True) \n",
    "weights"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], requires_grad=True)"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bias = torch.zeros(10, requires_grad=True)\n",
    "bias"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor(13.7700, grad_fn=<NllLossBackward0>)\n"
     ]
    }
   ],
   "source": [
    "bs = 64\n",
    "xb = x_train[0:bs]  # a mini-batch from x\n",
    "yb = y_train[0:bs]\n",
    "#y=w*x+b 其中x为[64,784],w为[784,10],因为十分类\n",
    "weights = torch.randn([784, 10], dtype = torch.float,  requires_grad = True) \n",
    "bs = 64\n",
    "bias = torch.zeros(10, requires_grad=True)\n",
    "\n",
    "print(loss_func(model(xb), yb))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 创建一个model来更简化代码"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 必须继承nn.Module且在其构造函数中需调用nn.Module的构造函数\n",
    "- 无需写反向传播函数，nn.Module能够利用autograd自动实现反向传播\n",
    "- Module中的可学习参数可以通过named_parameters()或者parameters()返回迭代器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "from torch import nn\n",
    "\n",
    "class Mnist_NN(nn.Module):\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        self.hidden1 = nn.Linear(784, 128)\n",
    "        self.hidden2 = nn.Linear(128, 256)\n",
    "        self.out  = nn.Linear(256, 10)\n",
    "        self.dropout=nn.Dropout(0.5)\n",
    "\n",
    "    def forward(self, x):\n",
    "        x = F.relu(self.hidden1(x))\n",
    "        x=self.dropout(x)\n",
    "        x = F.relu(self.hidden2(x))\n",
    "        x=self.dropout(x)\n",
    "        x = self.out(x)\n",
    "        return x\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mnist_NN(\n",
      "  (hidden1): Linear(in_features=784, out_features=128, bias=True)\n",
      "  (hidden2): Linear(in_features=128, out_features=256, bias=True)\n",
      "  (out): Linear(in_features=256, out_features=10, bias=True)\n",
      "  (dropout): Dropout(p=0.5, inplace=False)\n",
      ")\n"
     ]
    }
   ],
   "source": [
    "net = Mnist_NN()\n",
    "print(net)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以打印我们定义好名字里的权重和偏置项"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "hidden1.weight Parameter containing:\n",
      "tensor([[-0.0248,  0.0333,  0.0236,  ...,  0.0233,  0.0096,  0.0160],\n",
      "        [ 0.0327,  0.0226,  0.0010,  ...,  0.0085, -0.0225,  0.0092],\n",
      "        [ 0.0350,  0.0104, -0.0195,  ...,  0.0204, -0.0154,  0.0205],\n",
      "        ...,\n",
      "        [ 0.0156,  0.0169, -0.0357,  ..., -0.0137,  0.0080,  0.0309],\n",
      "        [-0.0340,  0.0189,  0.0154,  ..., -0.0270,  0.0329,  0.0057],\n",
      "        [-0.0120, -0.0161,  0.0149,  ...,  0.0256,  0.0043,  0.0122]],\n",
      "       requires_grad=True) torch.Size([128, 784])\n",
      "hidden1.bias Parameter containing:\n",
      "tensor([-0.0068,  0.0172, -0.0090, -0.0155,  0.0282,  0.0142, -0.0222, -0.0051,\n",
      "        -0.0158, -0.0146, -0.0135,  0.0221, -0.0042,  0.0261, -0.0315, -0.0024,\n",
      "         0.0305,  0.0044, -0.0042, -0.0251,  0.0068, -0.0308, -0.0258, -0.0149,\n",
      "         0.0235,  0.0162, -0.0022,  0.0242,  0.0305, -0.0287, -0.0176, -0.0042,\n",
      "         0.0202,  0.0030,  0.0015,  0.0090,  0.0121, -0.0105, -0.0276,  0.0050,\n",
      "         0.0054, -0.0081, -0.0064,  0.0329,  0.0288, -0.0162, -0.0024, -0.0195,\n",
      "         0.0286, -0.0208, -0.0275,  0.0026,  0.0153,  0.0100,  0.0344, -0.0134,\n",
      "        -0.0153, -0.0210, -0.0184, -0.0047,  0.0174,  0.0160, -0.0054, -0.0046,\n",
      "        -0.0291,  0.0183, -0.0124, -0.0068, -0.0030,  0.0213,  0.0243,  0.0177,\n",
      "        -0.0102,  0.0230,  0.0178,  0.0078, -0.0182,  0.0078,  0.0339,  0.0263,\n",
      "        -0.0340, -0.0167,  0.0347,  0.0005,  0.0021, -0.0062, -0.0287,  0.0227,\n",
      "        -0.0092,  0.0220, -0.0101, -0.0044, -0.0303,  0.0143,  0.0170,  0.0166,\n",
      "         0.0308, -0.0252, -0.0114, -0.0153,  0.0306,  0.0218, -0.0047,  0.0277,\n",
      "         0.0115, -0.0079, -0.0220,  0.0281, -0.0241, -0.0247,  0.0142,  0.0304,\n",
      "         0.0293, -0.0183,  0.0260,  0.0239,  0.0061, -0.0135,  0.0333,  0.0315,\n",
      "         0.0229,  0.0034,  0.0307, -0.0222, -0.0026,  0.0252,  0.0341, -0.0156],\n",
      "       requires_grad=True) torch.Size([128])\n",
      "hidden2.weight Parameter containing:\n",
      "tensor([[ 0.0641, -0.0392,  0.0537,  ..., -0.0453,  0.0220,  0.0713],\n",
      "        [ 0.0678,  0.0768,  0.0193,  ...,  0.0403,  0.0607,  0.0589],\n",
      "        [ 0.0145, -0.0530,  0.0262,  ...,  0.0228,  0.0792,  0.0402],\n",
      "        ...,\n",
      "        [-0.0204,  0.0210, -0.0513,  ..., -0.0033,  0.0335, -0.0157],\n",
      "        [ 0.0697,  0.0662, -0.0581,  ..., -0.0047, -0.0179,  0.0052],\n",
      "        [ 0.0091,  0.0480,  0.0805,  ..., -0.0010, -0.0369,  0.0152]],\n",
      "       requires_grad=True) torch.Size([256, 128])\n",
      "hidden2.bias Parameter containing:\n",
      "tensor([ 1.0102e-02,  1.3410e-02, -4.4833e-02, -7.7017e-03, -7.7758e-02,\n",
      "        -6.7722e-02, -5.0453e-02, -5.0912e-02,  8.0921e-02,  7.8008e-02,\n",
      "        -2.6036e-02, -2.2361e-02, -8.4978e-02, -5.6202e-02, -9.4455e-03,\n",
      "         4.6816e-02, -6.3827e-02, -4.8163e-03,  2.0911e-02,  7.2671e-03,\n",
      "        -7.1018e-02,  2.5458e-02, -2.1175e-02,  2.4014e-02,  8.3496e-02,\n",
      "        -6.3563e-02, -8.2916e-02,  7.6187e-02, -8.1214e-02,  3.7754e-02,\n",
      "         7.6993e-02,  7.7082e-02,  1.4593e-02,  1.7721e-02,  3.7838e-02,\n",
      "        -6.9975e-03, -5.1185e-02,  4.5955e-02, -8.0138e-02,  1.2207e-02,\n",
      "         4.9533e-02,  9.4852e-03,  8.1017e-03,  5.9020e-02, -6.2033e-02,\n",
      "         3.0174e-02,  7.8723e-02,  6.5307e-02,  6.6103e-03, -5.0801e-02,\n",
      "        -8.7520e-02,  2.6597e-02,  8.2021e-02, -2.6366e-02, -8.0563e-02,\n",
      "        -2.3230e-02,  1.3377e-03,  1.8009e-02, -2.9883e-02, -5.3830e-02,\n",
      "        -3.3634e-03,  3.9633e-02, -6.0335e-03,  3.2760e-02,  4.1147e-03,\n",
      "         5.6668e-02, -6.3351e-03, -5.8351e-02, -8.7730e-03,  3.7649e-02,\n",
      "        -8.1078e-02,  6.8551e-02,  4.2667e-02,  3.5546e-02,  4.4653e-03,\n",
      "         5.0797e-02,  1.3082e-02,  4.1158e-02, -5.7464e-02, -6.5392e-02,\n",
      "        -2.7385e-02,  3.8652e-02, -3.8860e-02,  1.6409e-02, -2.5179e-02,\n",
      "        -4.0559e-02,  4.5885e-02, -6.1485e-02,  2.1620e-02, -5.4308e-02,\n",
      "         6.4410e-02,  2.1514e-02, -1.7645e-02,  3.0488e-03, -2.6847e-02,\n",
      "         4.4784e-02,  6.2473e-02,  7.1640e-02,  4.5061e-02,  1.1304e-02,\n",
      "         2.3062e-02, -5.5515e-02, -3.2036e-02, -8.2153e-02, -2.6199e-02,\n",
      "         7.9248e-02,  1.4821e-02,  5.1280e-02,  3.8734e-02, -1.6436e-02,\n",
      "        -5.7811e-02, -3.2843e-02,  3.1485e-02,  2.8899e-02,  3.2528e-02,\n",
      "         4.3986e-02, -3.3491e-02, -6.5366e-02, -2.1266e-02,  7.4633e-02,\n",
      "         5.7757e-02, -8.7150e-02, -7.5818e-04,  1.5518e-02, -7.6911e-02,\n",
      "        -1.4651e-02, -3.8579e-02,  1.0064e-02,  7.5709e-03, -6.2071e-02,\n",
      "         3.0098e-02,  1.4085e-02, -2.7214e-02,  8.7708e-02,  6.9286e-02,\n",
      "        -4.0940e-02, -7.1594e-02, -4.3485e-02,  2.3832e-02, -6.3452e-02,\n",
      "         1.5267e-02,  2.0323e-02, -1.9004e-02,  4.2717e-02,  4.7491e-02,\n",
      "         8.6813e-02, -2.0829e-03,  1.0728e-02,  6.7900e-02,  4.7256e-02,\n",
      "        -1.9601e-02, -2.4188e-04, -8.1893e-02, -8.4593e-02, -6.4378e-02,\n",
      "        -3.3957e-02, -1.5317e-02,  2.2141e-02, -7.2694e-02, -6.3267e-03,\n",
      "         7.5515e-02, -2.7642e-02, -6.9399e-02, -3.8050e-02, -6.2045e-02,\n",
      "         2.2206e-02, -6.0005e-02, -6.4870e-02, -3.4113e-03,  8.2388e-02,\n",
      "         8.2705e-02, -3.5894e-02,  2.7767e-02, -6.8238e-02,  3.9438e-02,\n",
      "        -2.0162e-02, -8.7252e-02,  7.9886e-02,  6.6774e-02, -5.3845e-03,\n",
      "        -5.5226e-02, -2.9520e-02, -6.3174e-02, -5.6878e-05,  3.7667e-02,\n",
      "        -5.7926e-02, -4.0523e-02, -7.1987e-02, -5.8839e-02, -6.6094e-02,\n",
      "        -6.3505e-02,  3.2123e-02, -4.5118e-02,  4.0982e-02, -8.4568e-02,\n",
      "         5.5196e-03, -8.7521e-02,  6.8443e-02, -1.2163e-02,  1.7708e-03,\n",
      "         2.1423e-02, -3.2549e-02, -7.5381e-02,  5.7136e-02, -1.7934e-02,\n",
      "         8.8114e-02, -4.4943e-02,  5.0291e-03, -7.4780e-03, -5.6912e-02,\n",
      "         6.1993e-02,  2.8052e-02, -3.0651e-02, -5.4890e-02,  2.6732e-02,\n",
      "        -6.8059e-02,  5.9094e-02,  4.2608e-02, -2.3909e-02,  1.3073e-02,\n",
      "         1.0049e-02,  1.0568e-02, -7.1651e-02, -5.0212e-02, -1.7043e-02,\n",
      "        -2.4464e-02,  1.4207e-03, -1.8111e-02,  2.5644e-02,  7.2951e-02,\n",
      "        -4.2038e-02, -4.9360e-02,  3.2336e-02, -7.7261e-02, -7.1456e-02,\n",
      "        -5.0180e-02,  7.1070e-03, -4.9467e-03, -5.1541e-02, -6.8563e-02,\n",
      "        -7.9149e-02,  4.1887e-03, -2.1488e-02,  4.7246e-02, -3.9421e-02,\n",
      "         4.7643e-02,  8.5606e-02, -8.5606e-03,  2.1641e-02,  1.3780e-02,\n",
      "         3.5406e-03, -3.3292e-02,  4.5879e-04,  8.7637e-02,  4.7391e-02,\n",
      "        -6.5379e-02], requires_grad=True) torch.Size([256])\n",
      "out.weight Parameter containing:\n",
      "tensor([[ 0.0360,  0.0185, -0.0372,  ..., -0.0474, -0.0560,  0.0280],\n",
      "        [ 0.0125, -0.0014,  0.0146,  ..., -0.0295, -0.0216,  0.0040],\n",
      "        [-0.0252,  0.0607, -0.0462,  ...,  0.0060,  0.0430,  0.0352],\n",
      "        ...,\n",
      "        [-0.0572,  0.0370, -0.0602,  ..., -0.0615, -0.0135, -0.0142],\n",
      "        [-0.0171, -0.0253, -0.0426,  ..., -0.0498,  0.0316, -0.0181],\n",
      "        [ 0.0279,  0.0528, -0.0600,  ..., -0.0278,  0.0574,  0.0143]],\n",
      "       requires_grad=True) torch.Size([10, 256])\n",
      "out.bias Parameter containing:\n",
      "tensor([0.0146, 0.0139, 0.0145, 0.0528, 0.0136, 0.0188, 0.0232, 0.0033, 0.0005,\n",
      "        0.0595], requires_grad=True) torch.Size([10])\n"
     ]
    }
   ],
   "source": [
    "for name, parameter in net.named_parameters():\n",
    "    print(name, parameter,parameter.size())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用TensorDataset和DataLoader来简化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "from torch.utils.data import TensorDataset\n",
    "from torch.utils.data import DataLoader\n",
    "\n",
    "train_ds = TensorDataset(x_train, y_train)\n",
    "train_dl = DataLoader(train_ds, batch_size=bs, shuffle=True)\n",
    "\n",
    "valid_ds = TensorDataset(x_valid, y_valid)\n",
    "valid_dl = DataLoader(valid_ds, batch_size=bs * 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_data(train_ds, valid_ds, bs):\n",
    "    return (\n",
    "        DataLoader(train_ds, batch_size=bs, shuffle=True),\n",
    "        DataLoader(valid_ds, batch_size=bs * 2),\n",
    "    )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 一般在训练模型时加上model.train()，这样会正常使用Batch Normalization和 Dropout\n",
    "- 测试的时候一般选择model.eval()，这样就不会使用Batch Normalization和 Dropout"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# net.train()\n",
    "# for xb, yb in train_dl:\n",
    "#     print(xb.shape)\n",
    "#     print(yb.shape)\n",
    "#     #loss_batch(model, loss_func, xb, yb, opt)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "([(1, 2), (2, 5), (3, 6)], [(1, 2, 3), (2, 5, 6)])"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a=[1,2,3]\n",
    "b=[2,5,6]\n",
    "list(zip(a,b)),list(zip(*zip(a,b)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "def fit(steps, model, loss_func, opt, train_dl, valid_dl):\n",
    "    for step in range(steps):\n",
    "        #训练\n",
    "        model.train()\n",
    "        for xb, yb in train_dl:\n",
    "            loss_batch(model, loss_func, xb, yb, opt)\n",
    "        #验证\n",
    "        model.eval()\n",
    "        with torch.no_grad():\n",
    "            losses, nums = zip(\n",
    "                *[loss_batch(model, loss_func, xb, yb) for xb, yb in valid_dl]\n",
    "            )\n",
    "        val_loss = np.sum(np.multiply(losses, nums)) / np.sum(nums)\n",
    "        print('当前step:'+str(step), '验证集损失：'+str(val_loss))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [],
   "source": [
    "from torch import optim\n",
    "def get_model():\n",
    "    model = Mnist_NN()\n",
    "    return model, optim.SGD(model.parameters(), lr=0.001)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "def loss_batch(model, loss_func, xb, yb, opt=None):\n",
    "    loss = loss_func(model(xb), yb)\n",
    "\n",
    "    if opt is not None:\n",
    "        #反向传播\n",
    "        loss.backward()\n",
    "        #执行更新\n",
    "        opt.step()\n",
    "        #取消累加\n",
    "        opt.zero_grad()\n",
    "\n",
    "    return loss.item(), len(xb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 三行搞定！"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "当前step:0 验证集损失：2.279737459564209\n",
      "当前step:1 验证集损失：2.2551090145111083\n",
      "当前step:2 验证集损失：2.219924785232544\n",
      "当前step:3 验证集损失：2.1667874340057374\n",
      "当前step:4 验证集损失：2.0869945499420166\n",
      "当前step:5 验证集损失：1.9736527320861816\n",
      "当前step:6 验证集损失：1.8225477703094481\n",
      "当前step:7 验证集损失：1.6370421781539917\n",
      "当前step:8 验证集损失：1.4375006267547608\n",
      "当前step:9 验证集损失：1.252133971977234\n",
      "当前step:10 验证集损失：1.0964955810546875\n",
      "当前step:11 验证集损失：0.976633996963501\n",
      "当前step:12 验证集损失：0.8811806706428528\n",
      "当前step:13 验证集损失：0.807243722820282\n",
      "当前step:14 验证集损失：0.746246964931488\n",
      "当前step:15 验证集损失：0.6970054780960083\n",
      "当前step:16 验证集损失：0.6536278641700745\n",
      "当前step:17 验证集损失：0.6174778554916381\n",
      "当前step:18 验证集损失：0.5867856886863708\n",
      "当前step:19 验证集损失：0.5599931713104248\n",
      "当前step:20 验证集损失：0.5377737182140351\n",
      "当前step:21 验证集损失：0.5171872247695923\n",
      "当前step:22 验证集损失：0.49940068397521975\n",
      "当前step:23 验证集损失：0.4828449743270874\n",
      "当前step:24 验证集损失：0.4684952738285065\n"
     ]
    }
   ],
   "source": [
    "train_dl, valid_dl = get_data(train_ds, valid_ds, bs)\n",
    "model, opt = get_model()\n",
    "fit(25, model, loss_func, opt, train_dl, valid_dl)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.return_types.max(\n",
      "values=tensor([ 4.3939,  4.1835,  5.0429,  4.6406,  6.2130,  2.8596,  3.5499,  3.9447,\n",
      "         3.2462,  2.8376,  3.5787,  5.8673,  5.6481,  4.1942,  5.9643,  5.0683,\n",
      "         4.0789,  3.4469,  6.9921,  4.2806,  4.1104,  4.5704,  4.3242,  4.0316,\n",
      "         4.5378,  2.3900,  4.2073,  4.6922,  6.5418,  4.2917,  5.7968,  3.6964,\n",
      "         5.4193,  4.2169,  6.0536,  3.1670, 10.5832,  3.0502,  4.7788,  6.2907,\n",
      "         5.1795,  3.5023,  4.9850,  4.9241,  2.3213,  5.2947,  2.6990,  4.5127,\n",
      "         3.3684,  1.9789,  5.2696,  4.0602,  4.9874,  3.7277,  3.2671,  4.8620,\n",
      "         3.6595,  6.4449,  5.0349,  4.0730,  3.4553,  9.2333,  5.7251,  6.2471,\n",
      "         5.7013,  5.4464,  7.2078,  2.9385,  3.9625,  5.0217,  7.2126,  2.0732,\n",
      "         7.9040,  5.4874,  1.8404,  3.3713,  4.7308,  5.1916,  3.9525,  4.1576,\n",
      "         3.6767,  8.0429,  2.9928,  6.1006,  3.5807,  4.1783,  5.4715,  4.1469,\n",
      "         2.4616,  5.4348,  2.1309,  2.4840,  7.0579,  7.9913,  3.7290,  8.2336,\n",
      "         7.5095,  4.8187,  6.7615,  4.9023,  5.6874,  7.1229,  5.2845,  6.1679,\n",
      "         5.8278,  5.2421,  4.0126,  4.3124,  6.0337,  3.8271,  4.5950,  3.3140,\n",
      "         4.2596,  7.3997,  3.6517,  7.7158,  2.5742,  4.6227,  7.6173,  4.7468,\n",
      "         2.1007,  8.3559,  6.8769, 10.4870,  2.9073,  6.6011,  2.5159,  9.6608]),\n",
      "indices=tensor([3, 8, 6, 9, 6, 4, 5, 3, 8, 4, 8, 2, 3, 8, 4, 8, 1, 5, 0, 3, 7, 7, 4, 1,\n",
      "        0, 5, 0, 6, 2, 9, 9, 4, 1, 3, 6, 8, 0, 7, 7, 6, 8, 9, 0, 3, 8, 3, 7, 7,\n",
      "        3, 4, 4, 1, 6, 9, 8, 1, 1, 0, 6, 6, 5, 0, 1, 1, 7, 2, 7, 3, 1, 4, 0, 5,\n",
      "        0, 6, 9, 7, 6, 8, 5, 9, 4, 0, 6, 1, 9, 2, 2, 8, 7, 4, 1, 4, 6, 6, 1, 7,\n",
      "        2, 8, 6, 9, 7, 0, 9, 1, 6, 2, 2, 3, 6, 4, 9, 5, 8, 6, 8, 7, 3, 8, 6, 9,\n",
      "        9, 7, 6, 0, 9, 6, 7, 0]))\n",
      "torch.return_types.max(\n",
      "values=tensor([4.1332, 8.7272, 6.4263, 6.3755, 4.3432, 4.1053, 3.9851, 3.2530, 5.0673,\n",
      "        7.8681, 4.4538, 5.8957, 6.5164, 6.3730, 1.9083, 6.7983, 3.7068, 5.1960,\n",
      "        7.2572, 8.0569, 5.8253, 4.3932, 4.7706, 8.5785, 2.8138, 6.0629, 4.6391,\n",
      "        4.3518, 8.8413, 8.9517, 5.8648, 5.7637, 7.8060, 4.0662, 2.1014, 5.1984,\n",
      "        7.6040, 6.1982, 3.9271, 5.8360, 4.4116, 5.4701, 4.0985, 5.1448, 3.3150,\n",
      "        4.2784, 5.6377, 5.6965, 4.7298, 3.6591, 2.5939, 5.4746, 2.3078, 4.4212,\n",
      "        6.1624, 5.3013, 3.0847, 8.9768, 3.8980, 3.3476, 4.8586, 5.1721, 5.3362,\n",
      "        5.9122, 4.0812, 6.6537, 3.0451, 4.1025, 2.2386, 7.1150, 3.7038, 6.4783,\n",
      "        7.5552, 4.0314, 2.7597, 5.8582, 5.8412, 7.4988, 4.0023, 6.4060, 5.5030,\n",
      "        5.0533, 3.7832, 8.1733, 3.4604, 5.5037, 5.1171, 5.6405, 3.5206, 4.7422,\n",
      "        6.1754, 5.2735, 6.2230, 6.0251, 5.0241, 3.2996, 1.9886, 4.6704, 4.8494,\n",
      "        7.0523, 4.8760, 2.2957, 6.4264, 4.0013, 3.8016, 2.8258, 6.3062, 4.5733,\n",
      "        2.3445, 5.6348, 3.6137, 6.6658, 4.6592, 7.0391, 5.6911, 5.6125, 4.0924,\n",
      "        4.7635, 1.7992, 4.4467, 1.8106, 4.9020, 3.7437, 4.1080, 4.3124, 5.2123,\n",
      "        9.9805, 6.5464]),\n",
      "indices=tensor([9, 7, 1, 3, 6, 3, 9, 6, 1, 7, 5, 1, 3, 3, 5, 7, 4, 9, 6, 7, 3, 6, 1, 0,\n",
      "        4, 2, 4, 3, 0, 0, 1, 6, 6, 4, 2, 9, 4, 6, 3, 2, 6, 9, 8, 8, 8, 5, 7, 3,\n",
      "        8, 4, 1, 8, 9, 3, 4, 4, 3, 0, 9, 5, 4, 4, 1, 8, 0, 6, 1, 3, 2, 0, 8, 6,\n",
      "        0, 3, 5, 4, 9, 0, 3, 1, 0, 9, 3, 2, 8, 3, 3, 7, 4, 9, 2, 1, 6, 2, 1, 8,\n",
      "        7, 1, 9, 7, 0, 7, 2, 9, 1, 4, 7, 0, 8, 1, 8, 0, 0, 6, 6, 4, 7, 9, 1, 2,\n",
      "        9, 1, 5, 2, 5, 3, 7, 7]))\n",
      "torch.return_types.max(\n",
      "values=tensor([1.8335, 7.2726, 3.5134, 5.3194, 3.7000, 5.8614, 5.1670, 4.3028, 4.9714,\n",
      "        5.0444, 5.4474, 4.6248, 5.5693, 6.6149, 4.9787, 4.7844, 3.6741, 4.5598,\n",
      "        5.8466, 6.4131, 3.4075, 5.0201, 4.9105, 2.3136, 6.9234, 8.4321, 6.7309,\n",
      "        5.2319, 5.2153, 3.5345, 2.6267, 6.8524, 4.1299, 6.7363, 6.1118, 8.2712,\n",
      "        5.8933, 6.2745, 3.8482, 6.4517, 3.7643, 4.7408, 6.9127, 4.6153, 5.5368,\n",
      "        4.5279, 3.5665, 3.7082, 4.2843, 8.3041, 4.4095, 1.9560, 6.4521, 3.7415,\n",
      "        9.5174, 6.1241, 3.8989, 5.8459, 3.7680, 8.0995, 3.2962, 4.8541, 4.4992,\n",
      "        3.2694, 4.5108, 4.4881, 4.0328, 6.7013, 6.1903, 5.2395, 6.2549, 3.0699,\n",
      "        5.1181, 6.3961, 5.9242, 7.5782, 3.3461, 5.7966, 8.0410, 7.9328, 6.6765,\n",
      "        5.8483, 4.9538, 5.8570, 6.3299, 5.0343, 2.4254, 1.6348, 5.8222, 6.8294,\n",
      "        2.9712, 4.3872, 2.9760, 4.5634, 5.4126, 5.1634, 3.7148, 2.8889, 5.7291,\n",
      "        2.8982, 5.7686, 6.5015, 5.1308, 4.0654, 6.4775, 4.5545, 4.9573, 1.9547,\n",
      "        5.5655, 4.0368, 1.8373, 5.1605, 3.8048, 4.0013, 3.3008, 5.5793, 5.0243,\n",
      "        5.4674, 5.3312, 4.5798, 5.9306, 4.5167, 2.8858, 6.5337, 6.5816, 3.8766,\n",
      "        3.6134, 2.5139]),\n",
      "indices=tensor([5, 0, 8, 2, 3, 1, 3, 5, 1, 3, 6, 4, 8, 7, 6, 2, 8, 1, 3, 6, 6, 8, 7, 8,\n",
      "        6, 0, 4, 8, 4, 9, 3, 2, 3, 6, 2, 0, 1, 1, 2, 2, 3, 3, 0, 4, 3, 5, 8, 6,\n",
      "        9, 7, 3, 8, 3, 9, 0, 0, 3, 1, 4, 2, 5, 3, 9, 4, 0, 5, 3, 6, 0, 7, 1, 8,\n",
      "        0, 7, 3, 0, 0, 1, 2, 2, 3, 3, 1, 4, 2, 5, 5, 3, 0, 7, 8, 8, 4, 7, 1, 7,\n",
      "        5, 0, 0, 1, 1, 0, 9, 1, 7, 3, 1, 8, 3, 7, 7, 1, 2, 9, 9, 0, 3, 7, 3, 7,\n",
      "        7, 4, 3, 0, 7, 2, 7, 5]))\n",
      "torch.return_types.max(\n",
      "values=tensor([4.2171, 8.3448, 4.2442, 2.8374, 4.5032, 6.0387, 5.8574, 2.1656, 4.2351,\n",
      "        2.0175, 4.0898, 3.6257, 3.2258, 6.5474, 5.4397, 2.3445, 5.0017, 5.0927,\n",
      "        3.1892, 3.3682, 4.2708, 5.2344, 2.5883, 5.5175, 3.1274, 3.5443, 3.5126,\n",
      "        4.7219, 4.7925, 3.3380, 5.1457, 2.9479, 3.4851, 5.1320, 3.1106, 4.2219,\n",
      "        6.3187, 3.2657, 3.5791, 6.7574, 2.5759, 1.7527, 2.9577, 6.7856, 1.8783,\n",
      "        3.7741, 4.1751, 3.8374, 5.7026, 2.5717, 6.0257, 7.6180, 3.6759, 5.6681,\n",
      "        5.3897, 5.2815, 4.7732, 8.1729, 4.3330, 4.8826, 8.2239, 2.9927, 2.8670,\n",
      "        5.8404, 5.1061, 4.0987, 4.5908, 6.5315, 5.2127, 6.4536, 4.3475, 6.4896,\n",
      "        2.6392, 7.5396, 5.1988, 2.2046, 5.1547, 3.8701, 3.1677, 7.2746, 6.9398,\n",
      "        6.6705, 3.7751, 3.3841, 7.5378, 2.2129, 3.0295, 3.9302, 5.1180, 2.6462,\n",
      "        7.1575, 8.5086, 5.3010, 6.1918, 7.2736, 9.0111, 2.9503, 5.4416, 5.4403,\n",
      "        4.5983, 2.5574, 6.2641, 5.3182, 5.3431, 6.3424, 3.8853, 3.9729, 4.8437,\n",
      "        9.0483, 5.1687, 3.0583, 6.1952, 5.7793, 2.0300, 4.1360, 2.8287, 4.8670,\n",
      "        4.5944, 4.7799, 4.9666, 6.0291, 2.9999, 2.0459, 3.1664, 5.9892, 2.2089,\n",
      "        6.2258, 8.0412]),\n",
      "indices=tensor([9, 0, 9, 6, 4, 4, 0, 4, 7, 8, 8, 5, 6, 1, 5, 6, 1, 3, 6, 9, 1, 4, 5, 0,\n",
      "        9, 5, 6, 4, 3, 8, 3, 6, 4, 8, 6, 4, 5, 8, 5, 0, 0, 6, 1, 4, 6, 8, 5, 9,\n",
      "        4, 4, 0, 0, 9, 1, 7, 9, 7, 2, 3, 0, 0, 9, 8, 1, 8, 2, 4, 5, 2, 1, 8, 7,\n",
      "        5, 2, 9, 4, 5, 0, 9, 0, 7, 1, 4, 9, 7, 8, 5, 4, 1, 9, 2, 2, 0, 1, 2, 2,\n",
      "        0, 3, 1, 7, 5, 0, 4, 2, 7, 1, 9, 3, 0, 1, 6, 2, 2, 5, 1, 8, 5, 1, 4, 6,\n",
      "        2, 8, 6, 5, 2, 5, 4, 0]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 4.4276,  3.2366,  4.7169,  3.2314,  4.3672,  5.2199,  9.5527,  3.6998,\n",
      "         2.4825,  3.8076,  1.5038,  8.2860,  4.7739,  5.0949,  9.8686,  7.8118,\n",
      "         4.6952,  6.2317,  4.2438,  3.8719,  5.1712,  4.7708,  5.3657,  2.8761,\n",
      "         1.9959,  4.8755,  6.9586, 10.8948,  4.0904,  6.0451, 10.0798,  6.8141,\n",
      "         4.4916,  6.5379,  3.6317,  4.4373,  4.2539,  4.7519,  5.8175,  6.3242,\n",
      "         4.5179,  2.8679,  3.0173,  3.4636,  6.0269,  4.7563,  5.0804,  7.0105,\n",
      "         3.5448,  5.6988,  3.2919,  6.9135,  2.3284,  4.6139,  6.3017,  4.2255,\n",
      "         3.6149,  3.6099,  4.3652,  2.5564,  3.3642,  3.6068,  4.9984,  6.9716,\n",
      "         4.5462,  6.0337,  3.0133,  7.8161,  5.7345,  4.7149,  6.1159,  4.6452,\n",
      "         2.7873,  6.9103,  3.7072,  3.8684,  6.6862,  5.2963,  2.6873,  3.1569,\n",
      "         3.6258,  5.8494,  5.7274,  7.1538,  3.1495,  4.5570,  5.2762,  4.3885,\n",
      "         6.1241,  2.8003,  5.1011,  5.3793,  4.4880,  2.3054,  2.6973,  3.1229,\n",
      "         4.7770,  4.5042,  2.3792,  6.5778,  2.7136,  7.0553,  5.3881,  5.1694,\n",
      "         3.5915,  8.8835,  2.4824,  7.2672,  8.8688,  5.2280,  5.6318,  6.1017,\n",
      "         3.7601,  2.7338,  4.5457,  7.3404,  5.5817,  6.3291,  8.9738,  5.5248,\n",
      "         2.3064,  3.5287,  2.0472,  6.4541,  3.6041,  6.1960,  9.9207,  4.3550]),\n",
      "indices=tensor([8, 8, 3, 9, 3, 4, 0, 9, 9, 6, 7, 0, 8, 1, 0, 2, 9, 3, 8, 4, 8, 5, 0, 8,\n",
      "        0, 7, 2, 0, 3, 1, 0, 2, 4, 3, 2, 4, 8, 5, 1, 6, 8, 7, 1, 8, 6, 7, 9, 0,\n",
      "        5, 1, 4, 2, 4, 3, 0, 4, 2, 5, 5, 8, 7, 5, 6, 2, 6, 1, 9, 7, 6, 2, 1, 4,\n",
      "        0, 1, 0, 4, 6, 1, 6, 9, 5, 9, 6, 6, 8, 8, 6, 4, 1, 5, 5, 3, 8, 3, 4, 9,\n",
      "        1, 4, 6, 3, 8, 3, 7, 3, 4, 0, 8, 6, 7, 1, 6, 6, 5, 8, 8, 7, 0, 0, 0, 1,\n",
      "        0, 5, 8, 6, 4, 0, 0, 7]))\n",
      "torch.return_types.max(\n",
      "values=tensor([6.2694, 4.3394, 3.9946, 8.0127, 1.0708, 6.2811, 5.3507, 5.0739, 3.8077,\n",
      "        4.1557, 1.9461, 4.5098, 4.9995, 5.0166, 7.2443, 4.9490, 3.7374, 5.1894,\n",
      "        4.3885, 4.0269, 4.1548, 5.4915, 3.8422, 4.7357, 2.7009, 6.8871, 6.5695,\n",
      "        5.1751, 4.2769, 5.6041, 3.8748, 5.0766, 6.3247, 4.6465, 6.1143, 4.0444,\n",
      "        5.3514, 3.7025, 3.3007, 5.7006, 3.2810, 6.6450, 5.3782, 5.2445, 8.3084,\n",
      "        4.6587, 3.4826, 2.8608, 4.5223, 5.1039, 2.0588, 3.2119, 3.6032, 5.7423,\n",
      "        5.1628, 5.0887, 3.9402, 6.5593, 1.0682, 4.2565, 2.4313, 5.1833, 4.5074,\n",
      "        4.4446, 5.8840, 5.8627, 4.5460, 4.2320, 3.9498, 5.9027, 5.7945, 2.2591,\n",
      "        5.7685, 4.6294, 5.2834, 4.9488, 2.5936, 4.9818, 1.4659, 4.4126, 3.4500,\n",
      "        4.7358, 6.0061, 7.4203, 5.8537, 4.6716, 5.2951, 4.8194, 3.8980, 3.4392,\n",
      "        6.0223, 5.2389, 8.3328, 7.7101, 1.9094, 6.0329, 4.8162, 4.3628, 3.6132,\n",
      "        5.8280, 3.6364, 6.7750, 7.8986, 3.9202, 6.3598, 5.3863, 3.1195, 4.4835,\n",
      "        5.9824, 7.7695, 6.6436, 4.7417, 4.0821, 7.5994, 5.0958, 5.5511, 4.0276,\n",
      "        3.6824, 3.7138, 5.5637, 5.3612, 8.6391, 3.2271, 6.5796, 1.9767, 5.1181,\n",
      "        3.5536, 4.4709]),\n",
      "indices=tensor([2, 5, 2, 0, 6, 6, 1, 1, 9, 5, 3, 8, 1, 4, 0, 7, 4, 6, 3, 7, 8, 1, 5, 9,\n",
      "        0, 7, 6, 1, 7, 2, 6, 3, 3, 4, 2, 5, 2, 5, 1, 3, 3, 7, 1, 3, 0, 1, 9, 9,\n",
      "        3, 2, 5, 2, 8, 3, 4, 2, 0, 7, 2, 4, 2, 7, 8, 7, 4, 2, 7, 8, 7, 1, 9, 8,\n",
      "        4, 3, 3, 8, 8, 3, 7, 6, 2, 7, 2, 0, 9, 4, 3, 0, 5, 5, 7, 1, 7, 2, 5, 3,\n",
      "        2, 4, 8, 5, 8, 6, 7, 1, 2, 8, 9, 9, 2, 0, 0, 1, 9, 2, 9, 3, 7, 4, 9, 5,\n",
      "        7, 6, 8, 7, 5, 8, 5, 9]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 2.4211,  7.2441,  5.1226,  5.2494,  4.3220,  5.8280,  6.3513,  6.9152,\n",
      "         4.4107,  4.1557,  4.7246,  5.2748,  5.4019,  5.4308,  2.2561,  5.1180,\n",
      "         4.0824,  6.2659,  4.7335,  4.9569,  5.6313,  4.2796,  4.6333,  3.8729,\n",
      "         7.2034,  7.1855,  3.1695,  7.3668,  2.8739,  4.3660,  4.0540,  5.1780,\n",
      "         3.8950,  3.1766,  2.9195,  6.8394,  4.2982,  3.4326,  3.9975,  5.8193,\n",
      "         7.8147,  6.0217,  6.0177,  6.2118,  7.3466,  7.1232,  2.1087,  7.3898,\n",
      "         4.0053,  6.5971,  7.2470,  3.8876,  9.9563,  2.7099,  5.0732,  5.6187,\n",
      "         3.6943,  5.0986,  3.6211,  4.5012,  3.6146,  5.2005,  5.6711,  5.2830,\n",
      "         4.7014,  6.3245,  5.4419,  2.5523,  3.2964,  3.1407,  4.9322,  8.7725,\n",
      "         5.1656,  2.5206,  5.8127,  6.5803,  3.4440,  5.4883,  3.3144,  4.7628,\n",
      "         1.8982,  5.8570,  4.5637,  5.8723,  7.2086,  4.4142,  5.2476,  5.5405,\n",
      "         4.2223,  5.2567,  3.6111,  5.5207,  3.0656,  5.3388, 11.5816,  5.9126,\n",
      "         5.9119,  5.1317,  4.6021,  6.0120,  7.5008,  5.4543,  5.4703,  3.8961,\n",
      "         5.5442,  5.2765,  4.9986,  7.2394,  6.6310,  5.0391,  5.0223,  5.4457,\n",
      "         4.8007,  5.4789,  7.4545,  3.5678,  6.3084,  6.1044,  3.0230,  5.9571,\n",
      "         4.3199,  3.8555,  5.0854,  3.3822,  5.6596,  6.7759,  5.3925,  6.0176]),\n",
      "indices=tensor([8, 0, 3, 1, 1, 2, 0, 3, 6, 9, 5, 5, 6, 6, 8, 7, 9, 8, 5, 9, 1, 2, 5, 8,\n",
      "        7, 6, 7, 7, 9, 1, 9, 1, 5, 9, 3, 3, 0, 1, 9, 9, 0, 3, 6, 6, 2, 0, 3, 3,\n",
      "        9, 6, 6, 9, 0, 9, 7, 6, 3, 0, 3, 1, 0, 1, 1, 5, 9, 9, 3, 9, 6, 2, 1, 0,\n",
      "        2, 8, 1, 6, 4, 9, 4, 1, 8, 7, 1, 9, 0, 5, 9, 1, 0, 1, 9, 9, 8, 8, 0, 6,\n",
      "        1, 6, 6, 9, 7, 8, 6, 8, 7, 8, 7, 2, 0, 7, 0, 4, 6, 5, 9, 3, 7, 3, 8, 3,\n",
      "        6, 9, 6, 7, 3, 6, 7, 5]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 3.4089,  5.1604,  2.9993,  6.2395,  4.1416,  7.2178,  4.2406,  6.7109,\n",
      "         2.0115,  3.9740,  5.6649,  4.8901,  3.4024,  6.9782,  3.2249,  5.7205,\n",
      "         4.2511,  6.3602,  5.0029,  6.5348,  2.5606,  4.4086,  5.5873,  2.4943,\n",
      "         5.9886,  6.9066,  7.6695,  6.6612,  4.7027,  4.3499,  3.4795,  5.5556,\n",
      "         6.3644, 10.6271,  2.8743,  5.8802,  6.8948,  6.4303,  5.3640,  7.4049,\n",
      "         4.8057,  5.2389,  7.2384,  4.4578,  5.8722,  7.5459,  2.1233,  7.0485,\n",
      "         3.1036,  4.7566,  4.7392,  3.3696,  4.5891,  7.8793,  4.2592,  5.0373,\n",
      "         5.9301,  7.8075,  5.2249,  7.6438,  4.2284,  5.3884,  7.6608,  3.9407,\n",
      "         3.7320,  7.4116,  6.6530,  7.2948,  4.7973,  3.8593,  7.3350,  4.4778,\n",
      "        10.1664,  7.5398,  4.5848,  6.6515,  2.8460,  5.2270,  5.5015,  5.2830,\n",
      "         3.0692,  4.8703,  8.1508,  5.8918,  4.7762,  1.8334,  5.2102,  2.6462,\n",
      "         7.1441,  4.4084,  5.2063,  8.0039,  4.5472,  7.2687,  3.9187,  7.4584,\n",
      "         2.2806,  3.7252,  2.3810,  5.9933,  5.0563,  5.2663,  4.9673,  6.0668,\n",
      "         6.4923,  5.8229,  3.5277,  5.4901,  1.9599,  5.4877,  5.6663,  4.9791,\n",
      "         2.9174,  5.1735,  4.6108,  6.4968,  4.2963,  5.4586,  6.2003,  6.2599,\n",
      "         1.8991,  4.5243,  4.1781,  4.3120,  4.8202,  6.5851,  5.3847,  6.3389]),\n",
      "indices=tensor([4, 2, 0, 2, 8, 2, 8, 7, 5, 1, 3, 1, 5, 0, 7, 1, 6, 2, 1, 3, 4, 9, 1, 6,\n",
      "        7, 6, 3, 7, 0, 8, 8, 9, 1, 0, 0, 1, 6, 2, 6, 3, 3, 4, 6, 5, 3, 6, 9, 7,\n",
      "        5, 8, 3, 9, 4, 0, 3, 1, 1, 2, 5, 3, 1, 4, 0, 5, 3, 6, 2, 7, 3, 8, 2, 9,\n",
      "        0, 3, 8, 2, 7, 9, 0, 3, 3, 2, 7, 1, 4, 6, 3, 5, 7, 5, 2, 2, 8, 3, 0, 2,\n",
      "        1, 1, 7, 3, 8, 9, 4, 7, 7, 2, 0, 1, 9, 1, 0, 8, 8, 8, 1, 7, 9, 8, 8, 1,\n",
      "        6, 0, 4, 0, 9, 6, 9, 7]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 7.9376,  5.9204,  4.7262,  4.3345,  4.3574,  9.1560,  5.0225,  7.5160,\n",
      "         3.9489,  5.6575,  7.0910,  6.0529,  5.2677,  5.3012,  2.9690,  4.4616,\n",
      "         4.4177, 10.1938,  6.3205,  6.6979,  9.8372,  6.5226,  5.7403,  3.3884,\n",
      "         4.2216,  4.6266,  5.5644,  5.9603,  6.2208,  5.4018,  2.5617,  7.2489,\n",
      "         5.0881,  5.8191,  3.3046,  7.8578,  5.0008,  6.2271,  7.7422,  7.7899,\n",
      "         4.6941,  6.6908,  3.8662,  4.9379,  7.2392,  7.1180,  2.2620,  5.3322,\n",
      "         4.2947,  4.0170,  5.3921,  5.5610,  3.4860,  4.1322,  4.0085,  3.1354,\n",
      "         3.0794,  3.5964,  5.5509,  6.2476,  6.7460,  6.5437,  4.1652,  5.3852,\n",
      "         6.2136,  7.2742,  6.8112,  6.4683,  6.1723,  5.0837,  2.4791,  5.6161,\n",
      "         5.8396,  4.2514,  5.9895,  4.9894,  4.3036,  7.1645,  2.7783,  6.3476,\n",
      "         2.6748,  5.6774,  4.2550,  3.3695,  3.7019,  7.4741,  6.3453,  5.0396,\n",
      "         5.2945,  6.4204,  5.4392,  7.0907,  6.3759,  5.8507,  5.0895,  6.3699,\n",
      "         4.2985, 10.0580,  4.9231,  5.3927,  1.4339,  5.3037,  5.6135,  5.8514,\n",
      "         3.8436,  6.2362,  3.1038,  4.1774,  4.6477,  6.8030,  3.6473,  7.6258,\n",
      "         3.5795,  3.9616,  5.2272,  7.1692,  3.1694,  8.3819,  5.4617,  5.2853,\n",
      "         3.0805,  3.9547,  7.0534,  9.3276,  2.5117,  5.5504,  5.5109,  8.0823]),\n",
      "indices=tensor([0, 7, 4, 5, 4, 0, 3, 6, 9, 1, 7, 1, 9, 2, 8, 5, 5, 0, 9, 7, 0, 0, 4, 4,\n",
      "        1, 4, 5, 1, 0, 8, 7, 6, 4, 0, 1, 0, 1, 0, 7, 3, 2, 7, 4, 1, 7, 6, 7, 4,\n",
      "        5, 2, 7, 6, 4, 9, 8, 5, 7, 9, 9, 1, 7, 3, 5, 8, 7, 6, 2, 3, 3, 9, 4, 9,\n",
      "        6, 5, 4, 9, 2, 3, 2, 7, 5, 8, 3, 5, 0, 6, 1, 4, 1, 7, 4, 6, 3, 2, 1, 2,\n",
      "        1, 0, 0, 9, 5, 4, 7, 0, 8, 1, 5, 2, 9, 3, 2, 4, 1, 5, 7, 6, 9, 7, 3, 8,\n",
      "        4, 9, 4, 0, 0, 1, 0, 2]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 5.4758,  4.3404,  2.5341,  6.2736,  2.4698,  4.9249,  3.9761,  8.4601,\n",
      "         3.8167, 10.1729,  2.9581,  6.1154,  4.9172,  5.3889,  6.0071,  9.7001,\n",
      "         5.0839,  6.1670,  2.8245,  6.2042,  3.9526,  4.7983,  2.5665,  6.1040,\n",
      "         2.6583,  5.1496,  4.3069,  7.9597,  3.2454,  7.8160,  5.7331,  4.6745,\n",
      "         5.8138,  4.4686,  7.0464,  5.1276,  2.6090,  5.1079,  5.9109,  6.7967,\n",
      "         4.0559,  6.1207,  3.2958,  4.1061,  4.3519,  5.3196,  5.9358,  7.1312,\n",
      "         2.0466,  4.4999,  2.9979,  8.9172,  5.1839,  9.4437,  4.8293,  3.6679,\n",
      "         4.6696,  5.9757,  9.6165,  4.2358,  6.0225,  8.0489,  4.8500,  8.5036,\n",
      "        10.4428,  4.6960,  5.8249,  7.1457,  8.6084,  6.1097,  4.3871,  5.9215,\n",
      "         4.0229,  6.7034,  7.6381,  3.3769,  4.3917,  8.2607,  1.9129,  2.1905,\n",
      "         6.9834,  8.8467,  3.8873,  9.6686,  4.5084,  6.9073,  4.2836,  3.6007,\n",
      "         2.3307,  5.4120,  3.0051,  4.6720,  4.4853,  4.4265,  5.7189,  5.4866,\n",
      "         4.6675,  4.9441,  5.0263,  2.3991,  4.9634,  4.7850,  2.8271,  5.4530,\n",
      "         4.3207,  5.6802,  3.2624,  8.9261,  5.0694,  3.8300,  3.0497,  5.8781,\n",
      "         6.0960,  8.3965,  3.1473,  4.8772,  3.8575,  6.5584,  3.5459,  5.6414,\n",
      "         3.2731,  5.5127,  2.5051,  8.4416,  6.4544,  5.8449,  3.9674,  8.3455]),\n",
      "indices=tensor([6, 2, 5, 4, 4, 5, 6, 6, 8, 7, 9, 8, 9, 9, 7, 0, 9, 1, 4, 2, 1, 2, 7, 4,\n",
      "        8, 5, 7, 6, 2, 7, 4, 8, 8, 9, 0, 1, 1, 8, 1, 6, 9, 7, 3, 1, 3, 1, 7, 4,\n",
      "        1, 3, 4, 7, 7, 7, 1, 8, 8, 9, 0, 3, 2, 6, 2, 0, 2, 3, 8, 6, 6, 4, 3, 8,\n",
      "        8, 4, 0, 2, 0, 7, 7, 8, 6, 6, 7, 0, 7, 3, 1, 8, 8, 6, 3, 8, 8, 2, 6, 1,\n",
      "        4, 1, 1, 3, 1, 9, 5, 4, 2, 3, 5, 0, 3, 4, 2, 4, 4, 0, 8, 9, 3, 6, 4, 9,\n",
      "        8, 2, 5, 2, 6, 1, 3, 7]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 2.0019,  6.4371,  7.7761,  2.8185,  5.7419,  5.6971,  2.0900,  4.8405,\n",
      "         4.0503,  5.2713,  9.3465,  4.2245,  3.9777,  6.7373,  2.2431,  7.0843,\n",
      "         3.1881,  5.9214,  3.0226,  8.4841,  4.1744, 10.8248,  3.3246, 11.4172,\n",
      "         3.4814,  5.6695,  4.3479,  5.2008,  8.4673,  6.2250,  7.5762,  8.4198,\n",
      "         3.8315,  4.8560,  3.4029,  5.2868,  3.9745,  8.0025,  3.9563,  7.4764,\n",
      "         2.8035,  4.1137,  2.3276,  6.1949,  3.0964,  6.1692,  3.2105,  5.9520,\n",
      "         4.5957,  6.0987,  4.4548, 10.5129,  5.4667,  2.7993,  6.4940,  7.1660,\n",
      "         8.5602,  2.7243,  3.9119,  4.3838,  5.3733,  5.0094,  6.0665,  4.0773,\n",
      "         7.5506,  3.2579,  3.8411,  5.4535,  7.9025,  2.3220,  3.7066,  6.0205,\n",
      "         8.2065,  8.6468,  2.7377,  5.7462,  5.4830,  6.2093,  5.6265,  7.5295,\n",
      "         5.5119,  6.8444,  4.2793,  5.7939,  2.1370, 11.1031,  4.6250,  2.7724,\n",
      "         3.3685,  5.4148,  7.0787,  5.3324,  5.5633,  3.8556,  3.1612,  8.7174,\n",
      "         6.0096,  4.7977,  5.0125,  5.3473,  1.7288,  5.7032,  3.5437,  4.6719,\n",
      "         5.1878,  4.6663,  4.3565,  6.7300,  2.7327,  7.2729,  5.6001,  6.3813,\n",
      "         3.7998,  5.4985,  3.5677,  6.8177,  3.4197,  4.8455,  6.3901,  4.7799,\n",
      "         4.8040,  5.5517,  7.7527,  5.1657,  4.9978,  5.5214,  3.7716,  6.3895]),\n",
      "indices=tensor([1, 9, 7, 1, 9, 1, 8, 1, 4, 9, 0, 8, 7, 6, 2, 6, 5, 9, 5, 0, 1, 0, 8, 0,\n",
      "        7, 1, 7, 8, 0, 4, 6, 6, 4, 8, 0, 1, 9, 2, 9, 6, 6, 2, 7, 2, 2, 4, 8, 0,\n",
      "        4, 9, 3, 0, 3, 3, 9, 7, 0, 4, 4, 3, 2, 8, 3, 2, 7, 5, 9, 8, 0, 3, 4, 4,\n",
      "        0, 7, 2, 6, 2, 2, 7, 2, 4, 7, 5, 7, 5, 0, 5, 2, 4, 1, 6, 2, 1, 2, 9, 0,\n",
      "        3, 1, 6, 2, 6, 3, 4, 4, 7, 3, 6, 6, 3, 7, 1, 8, 5, 9, 3, 0, 4, 1, 2, 2,\n",
      "        6, 3, 6, 4, 0, 5, 6, 6]))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.return_types.max(\n",
      "values=tensor([3.9100, 6.9671, 6.7107, 5.7640, 4.3643, 5.7528, 4.4155, 7.0599, 3.2387,\n",
      "        5.2184, 7.5726, 5.6646, 7.4304, 4.4247, 9.0546, 5.2533, 3.7411, 5.4327,\n",
      "        5.7532, 6.4822, 6.8778, 7.6948, 4.1119, 6.1529, 1.6060, 4.3622, 7.3668,\n",
      "        4.0768, 4.2370, 4.7902, 4.6000, 5.2115, 3.0824, 6.0824, 2.8454, 5.2814,\n",
      "        2.9937, 5.8817, 3.1465, 5.6001, 6.3681, 5.3415, 4.7465, 4.2415, 6.8610,\n",
      "        4.0092, 2.6417, 4.4928, 5.5587, 4.7283, 6.0284, 3.9820, 5.4104, 4.3253,\n",
      "        5.0985, 6.0753, 4.0061, 5.5767, 5.1554, 5.7131, 2.9426, 6.6089, 5.2497,\n",
      "        5.8287, 4.4095, 6.4195, 5.6479, 7.5645, 3.2819, 7.3392, 5.7867, 8.3416,\n",
      "        4.1405, 7.6657, 3.9103, 5.8545, 4.0466, 6.3817, 5.0745, 5.7693, 3.2290,\n",
      "        8.0464, 4.9825, 8.7680, 2.9736, 4.7857, 3.6296, 4.5388, 7.8154, 3.6971,\n",
      "        4.6865, 8.2200, 5.1911, 6.4326, 3.7358, 5.3820, 3.8921, 7.8134, 8.4725,\n",
      "        6.3316, 3.4313, 5.6230, 3.3915, 4.9083, 5.0085, 5.9259, 5.6415, 4.5711,\n",
      "        4.4607, 7.0473, 6.4624, 5.9604, 8.4879, 6.1331, 1.7153, 6.3813, 3.0400,\n",
      "        6.0195, 2.4409, 4.2117, 3.7785, 4.7919, 1.8645, 4.5785, 4.6520, 8.6145,\n",
      "        4.8616, 7.8367]),\n",
      "indices=tensor([6, 7, 6, 8, 8, 9, 5, 0, 5, 1, 2, 2, 7, 3, 0, 4, 8, 5, 1, 6, 3, 7, 9, 8,\n",
      "        8, 5, 0, 8, 1, 8, 6, 1, 8, 7, 9, 2, 5, 4, 6, 1, 2, 4, 8, 1, 7, 4, 4, 9,\n",
      "        6, 6, 2, 8, 7, 5, 3, 3, 6, 7, 0, 8, 1, 3, 9, 3, 9, 5, 3, 6, 6, 7, 0, 0,\n",
      "        6, 6, 4, 1, 8, 6, 3, 8, 8, 7, 0, 0, 6, 1, 0, 5, 7, 6, 8, 0, 7, 8, 9, 5,\n",
      "        8, 0, 2, 6, 1, 1, 8, 5, 9, 8, 6, 4, 9, 2, 6, 3, 0, 9, 1, 7, 5, 6, 1, 9,\n",
      "        6, 1, 4, 9, 7, 0, 3, 6]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 5.8904,  6.0989,  4.6778,  5.2714,  3.8211,  7.7586,  3.1766,  5.1234,\n",
      "         2.0111,  5.7609,  6.0346,  7.0044,  2.7408,  4.2808,  7.2210,  5.4174,\n",
      "         4.4036,  5.3784,  5.1585,  5.2457,  6.1078,  6.6527,  3.9006,  3.8969,\n",
      "         6.1236,  5.9134,  4.8039,  5.8836,  5.1997,  6.0391,  5.8568,  6.9216,\n",
      "         4.3001,  5.5329,  5.0362,  3.9300,  2.8843, 10.2088,  4.8542,  5.5424,\n",
      "         3.9318,  5.2796,  5.2418,  4.2219,  4.8660,  4.3180,  4.3923,  8.2763,\n",
      "         2.9231, 10.0323,  4.3358,  9.4914,  4.2170,  5.5907,  3.0398,  7.0248,\n",
      "         4.1248,  4.3450,  3.9118,  5.9167,  6.1175,  3.8079,  7.0912,  5.0468,\n",
      "         3.7717,  4.8803,  3.0156,  4.8990,  6.0538,  4.3506,  5.6288,  6.8595,\n",
      "         7.9008,  6.0057,  4.1550,  4.3983,  2.7234,  6.5511,  2.9661,  6.1614,\n",
      "         4.9409,  6.4441,  3.1994,  7.0384,  3.2943,  8.2043,  7.1943,  7.3192,\n",
      "         5.5747,  5.2857,  4.4275,  6.3922,  5.4992,  8.9014,  2.1891,  4.8963,\n",
      "         4.6818,  4.8678,  6.9572,  5.9358,  8.1651,  5.1070,  4.8320,  2.8576,\n",
      "         3.2438,  4.0389,  6.4846,  7.9514,  3.1328,  5.6313,  5.5984,  4.7623,\n",
      "         5.6829,  5.5766,  6.1141,  4.7711,  2.2785,  5.0765,  5.5356,  7.0927,\n",
      "         2.7296,  5.3551,  6.3937,  1.4242,  5.9998,  7.7839,  4.9465,  7.2062]),\n",
      "indices=tensor([3, 7, 6, 1, 1, 2, 3, 3, 8, 9, 0, 2, 1, 4, 2, 5, 7, 5, 1, 3, 1, 7, 7, 5,\n",
      "        7, 3, 5, 1, 1, 8, 1, 2, 7, 2, 6, 5, 3, 0, 9, 2, 8, 9, 3, 4, 2, 9, 4, 7,\n",
      "        9, 0, 7, 0, 8, 2, 9, 7, 9, 4, 1, 9, 6, 4, 0, 2, 9, 8, 6, 1, 4, 5, 1, 6,\n",
      "        2, 9, 5, 8, 1, 3, 6, 8, 5, 3, 0, 6, 2, 7, 4, 0, 6, 4, 5, 0, 6, 0, 2, 1,\n",
      "        9, 2, 7, 3, 7, 4, 0, 5, 3, 6, 2, 7, 9, 8, 5, 9, 2, 5, 7, 1, 4, 2, 9, 3,\n",
      "        8, 4, 2, 2, 2, 6, 6, 7]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 4.5624,  4.7922,  4.9502,  4.7100,  4.6449,  7.2938,  4.5696,  3.5794,\n",
      "         5.1428,  3.5893,  3.3694,  3.7425,  6.5261,  5.0787,  4.2152,  2.4909,\n",
      "         4.9944,  3.6790,  4.9534,  6.2190,  5.8664,  8.5825,  6.2812,  4.4407,\n",
      "         4.6661,  4.2371,  5.6843,  6.8155,  4.5950,  5.1091,  5.7111,  5.8056,\n",
      "         6.0897,  4.9192,  1.7969,  5.0873,  5.1626,  7.0982,  5.8345,  3.4874,\n",
      "         4.8952,  3.5224,  6.4311,  5.8303,  3.2133,  4.5086,  4.9348,  5.4027,\n",
      "         6.0437,  4.4117,  5.1310,  4.6978,  6.7674,  6.1012,  3.7193,  6.4841,\n",
      "         2.2703,  7.2490,  2.0975,  4.2052,  2.6866,  3.3715,  5.1559,  3.5664,\n",
      "         6.2518,  4.3152,  4.2753,  3.2728,  3.5417,  6.2257,  3.6996,  5.4915,\n",
      "         3.1289,  8.4672,  2.8329,  3.7898,  2.1879,  3.0379,  5.3206,  4.9439,\n",
      "         3.5101,  5.8060,  3.4144,  3.8076,  3.5649,  5.0684,  5.3123,  7.0459,\n",
      "         7.0607,  7.3102,  3.8691,  3.9856,  7.9892,  4.9137,  6.6823,  2.6326,\n",
      "         6.8751,  3.3901,  3.4421,  4.1849,  5.2524,  6.8408,  3.5712,  4.8874,\n",
      "         3.5037,  3.7885,  2.7069,  3.9601,  4.4894,  4.5483, 10.6235,  3.6876,\n",
      "         3.8687,  8.9875,  6.0338,  5.1060,  4.3477,  5.2728,  4.3979,  5.5526,\n",
      "         5.8792,  3.3153,  7.1656,  6.7695,  5.6320,  6.6074,  3.0341,  4.5603]),\n",
      "indices=tensor([6, 8, 1, 9, 3, 0, 8, 1, 1, 2, 5, 9, 6, 4, 4, 2, 0, 6, 2, 7, 4, 0, 3, 6,\n",
      "        9, 4, 6, 7, 5, 4, 4, 3, 6, 6, 7, 2, 6, 3, 2, 6, 7, 8, 3, 7, 7, 8, 1, 6,\n",
      "        4, 9, 1, 8, 9, 3, 5, 2, 8, 2, 2, 4, 1, 8, 2, 5, 6, 6, 9, 5, 3, 0, 6, 2,\n",
      "        6, 0, 2, 1, 0, 1, 1, 2, 5, 6, 8, 8, 2, 1, 1, 2, 7, 0, 8, 6, 3, 9, 0, 8,\n",
      "        2, 4, 5, 3, 6, 7, 7, 1, 3, 8, 7, 3, 1, 8, 0, 3, 3, 0, 6, 1, 4, 1, 2, 9,\n",
      "        1, 8, 2, 2, 6, 0, 3, 4]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 5.7673,  2.5849,  3.3791,  2.7541,  5.8060,  7.1269,  4.4073,  5.0024,\n",
      "         3.2789,  4.1558,  6.9837,  3.5591,  4.2926,  8.1898,  5.6767,  3.2257,\n",
      "         7.4352,  7.6610,  4.6662,  5.9336,  3.5890,  4.8069,  4.9941,  8.8687,\n",
      "         4.4868,  4.4911,  3.5584,  4.4554,  5.1890,  2.8151,  6.1483,  4.8621,\n",
      "         8.6006,  6.6982,  4.9949,  6.2157,  5.2377,  7.2383,  4.2305,  8.0965,\n",
      "         3.3666,  5.4714,  7.4901,  5.8377,  4.8769,  6.4846,  4.9267,  6.8524,\n",
      "         1.9239,  5.0343,  2.7818,  4.1889,  4.0586,  8.0214,  4.9495,  5.5212,\n",
      "         3.2688,  7.2259,  3.8660,  5.0498,  3.4508,  6.3107,  2.0306,  4.1486,\n",
      "         2.6724,  7.3961,  4.8257,  4.9941,  4.6524,  4.1414,  2.6716,  3.0927,\n",
      "         4.0564,  8.4069,  5.1770,  5.2393,  3.6026,  3.9732,  5.3459,  4.3284,\n",
      "         1.9815,  6.5380,  3.4601,  2.2882,  5.3166,  6.1027,  4.1149,  6.2402,\n",
      "         5.4357,  6.0265,  5.7503, 10.0068,  5.9146,  6.9737,  2.6238,  4.0708,\n",
      "         6.2048,  7.1278,  4.3064,  5.2844,  4.3006,  5.0410,  3.3667,  5.5212,\n",
      "         5.8124,  3.9948,  4.1097,  4.9776,  5.5383,  5.0099,  5.6068,  4.1238,\n",
      "         2.7320,  5.5013,  4.3098,  5.9639,  5.9643,  5.4548,  4.9457,  5.9589,\n",
      "         7.2791,  5.2359,  4.0635,  4.5279,  7.6242,  7.7008,  5.6906,  3.7594]),\n",
      "indices=tensor([5, 5, 7, 2, 9, 0, 3, 3, 9, 1, 7, 1, 2, 6, 7, 7, 2, 0, 2, 3, 9, 1, 4, 0,\n",
      "        3, 4, 0, 0, 4, 5, 5, 4, 0, 7, 0, 9, 0, 7, 8, 0, 1, 1, 0, 2, 1, 3, 4, 7,\n",
      "        7, 8, 7, 9, 5, 0, 3, 1, 3, 2, 8, 3, 5, 4, 9, 0, 2, 6, 7, 7, 4, 8, 7, 4,\n",
      "        8, 0, 0, 1, 4, 2, 2, 3, 6, 4, 5, 5, 1, 6, 8, 7, 8, 8, 1, 0, 2, 7, 5, 5,\n",
      "        1, 0, 3, 8, 0, 4, 4, 1, 3, 8, 2, 8, 1, 1, 4, 3, 8, 1, 8, 8, 1, 3, 9, 7,\n",
      "        6, 9, 7, 2, 7, 0, 3, 9]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 5.7424,  4.8535,  6.0949,  6.6333,  2.3329, 10.5534,  4.3398,  4.6996,\n",
      "         4.5478,  5.4146,  4.3110,  5.5495,  5.9358,  4.5209,  5.7689,  6.4656,\n",
      "         5.5839,  6.0468,  5.7761,  5.4726,  4.8013,  4.9710,  3.6483,  4.5392,\n",
      "         4.0676,  4.5555,  3.2098,  4.4209,  4.0227,  5.9300,  7.5789,  6.3791,\n",
      "         5.7453,  6.6393,  3.9286,  3.2275,  3.8449,  4.3648,  2.5039,  6.2407,\n",
      "         3.1923,  6.5680,  5.0074,  4.3422,  1.2555,  6.8583,  5.6509,  5.6476,\n",
      "         4.5853,  4.0302,  3.0432,  4.7647,  4.2867,  4.2296,  5.7446,  5.0675,\n",
      "         4.8716,  6.3316,  9.1555,  4.6418,  6.5187,  4.5525,  3.8247,  5.4103,\n",
      "         6.9777,  4.3797,  5.5084,  3.4837,  2.0118,  2.3222,  2.6381,  2.9471,\n",
      "         7.0769,  5.7899,  3.1680,  6.0346,  5.8391,  7.9774,  2.8721,  7.3613,\n",
      "         4.2351,  7.4583,  3.9650,  6.4825,  7.6244,  8.0806,  4.4794,  5.7810,\n",
      "         6.9352,  3.8467,  6.2867,  4.8933,  2.6792,  5.5261,  2.8025,  6.8067,\n",
      "         4.8398,  5.7270,  2.8067,  2.4227,  3.8135,  4.7607,  2.2852,  5.3490,\n",
      "         6.0755,  3.5189,  2.5597,  4.1275, 10.2340,  6.6325,  5.1914,  4.3129,\n",
      "         5.9561,  3.8783,  3.2682,  3.9122,  6.3064,  4.6456,  3.9215,  5.9975,\n",
      "         2.5169,  5.8555,  4.9051,  3.6967,  5.0005,  5.7930,  4.2187,  6.3127]),\n",
      "indices=tensor([6, 4, 2, 4, 1, 0, 4, 7, 5, 4, 9, 2, 1, 8, 3, 7, 1, 6, 9, 4, 3, 7, 9, 8,\n",
      "        9, 9, 3, 2, 8, 1, 5, 4, 1, 6, 9, 6, 9, 2, 2, 2, 0, 2, 4, 6, 7, 6, 4, 7,\n",
      "        8, 8, 3, 7, 5, 5, 7, 1, 2, 6, 0, 4, 0, 9, 4, 2, 7, 4, 0, 2, 9, 5, 3, 3,\n",
      "        0, 6, 5, 6, 7, 0, 3, 0, 6, 2, 1, 5, 0, 6, 0, 4, 7, 9, 7, 2, 8, 7, 8, 4,\n",
      "        2, 9, 9, 5, 1, 0, 3, 2, 4, 6, 5, 3, 0, 6, 9, 1, 1, 8, 9, 2, 0, 8, 3, 0,\n",
      "        5, 3, 1, 0, 3, 0, 1, 0]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 3.9407,  4.7954,  4.7609,  4.9635,  4.8916,  4.9372,  5.2753,  4.3431,\n",
      "         4.9873,  5.5022,  4.6559,  2.6152,  2.2910,  3.8110,  3.4768,  5.2442,\n",
      "         4.2568,  4.0254,  5.1869,  3.6369,  4.4505,  6.8699,  3.6407,  5.4434,\n",
      "         3.9953,  4.7506,  5.4455,  4.9196,  5.5178,  4.3222,  6.1641,  5.3336,\n",
      "         4.2348,  3.4862,  5.8779,  3.4012,  3.6157,  6.4110,  5.4466,  3.8534,\n",
      "         5.0470,  2.2476,  4.6160,  1.4115,  4.2765,  4.0824,  4.9366,  2.2608,\n",
      "         3.7544,  2.8974,  7.2639,  3.2148,  2.5754,  4.1799,  7.2084,  5.0433,\n",
      "         4.2933,  3.6152,  4.8004,  2.8790,  5.8172,  2.7079,  3.9343,  4.7337,\n",
      "         5.9269,  1.5661, 10.8142,  1.6493,  5.9340,  2.6044,  6.8299,  4.9682,\n",
      "         5.5545,  1.9272,  2.3462,  3.6885,  7.5727,  2.7143,  5.1866,  2.8256,\n",
      "         3.9530,  1.2202,  5.1138,  1.4022,  5.5505,  3.3239,  3.8490,  3.7909,\n",
      "         4.3042,  3.1740,  2.1289,  4.2860,  3.6253,  3.1273,  3.4189,  3.1580,\n",
      "         2.7383,  4.1028,  3.0277,  5.8282,  5.6172,  4.6907,  2.7361,  3.1105,\n",
      "         3.3138,  4.9396,  5.2321,  4.7349,  5.5113,  4.7989,  5.9304,  2.9203,\n",
      "         3.4893,  6.5385,  2.4855,  3.0489,  4.5080,  4.5394,  4.3788,  2.3496,\n",
      "         4.0146,  1.7728,  3.1058,  3.2825,  1.4125,  2.4231,  5.6390,  3.3600]),\n",
      "indices=tensor([6, 6, 8, 1, 7, 6, 6, 9, 1, 5, 1, 3, 9, 9, 6, 4, 0, 0, 6, 8, 2, 6, 1, 7,\n",
      "        8, 1, 4, 1, 6, 7, 1, 0, 8, 1, 1, 4, 1, 3, 4, 4, 1, 8, 8, 8, 0, 4, 9, 0,\n",
      "        5, 8, 3, 4, 4, 8, 6, 4, 3, 0, 5, 8, 5, 4, 7, 3, 4, 7, 0, 8, 3, 8, 2, 1,\n",
      "        1, 7, 5, 4, 7, 6, 0, 4, 4, 2, 0, 4, 2, 0, 3, 0, 1, 7, 9, 4, 9, 6, 2, 1,\n",
      "        7, 6, 7, 7, 9, 7, 6, 4, 7, 2, 0, 4, 6, 8, 4, 8, 3, 0, 7, 4, 3, 4, 7, 8,\n",
      "        3, 0, 5, 8, 5, 8, 1, 1]))\n",
      "torch.return_types.max(\n",
      "values=tensor([7.1667, 3.3575, 4.3020, 4.4099, 3.4713, 4.4910, 6.9459, 5.6123, 5.0730,\n",
      "        9.4321, 4.0125, 5.9380, 1.6860, 5.5116, 5.1450, 4.1442, 4.0889, 5.6038,\n",
      "        6.3631, 2.0103, 6.4520, 2.7857, 4.4746, 4.3674, 4.1744, 2.9932, 5.2653,\n",
      "        2.9473, 3.6681, 4.4615, 5.9601, 7.2152, 4.6761, 4.7444, 2.3342, 4.9989,\n",
      "        4.9776, 2.1892, 2.1164, 4.2805, 5.1818, 5.2439, 2.9522, 2.1639, 4.4966,\n",
      "        7.4126, 5.5917, 4.4680, 6.2509, 4.3011, 6.6538, 4.8161, 3.0767, 5.3762,\n",
      "        4.6878, 3.7362, 1.8943, 2.7957, 5.1465, 6.4777, 3.0683, 3.2421, 9.6809,\n",
      "        4.1694, 5.0752, 3.4129, 4.0838, 2.8770, 5.4720, 0.7047, 1.6562, 2.5765,\n",
      "        4.5053, 5.5997, 5.3959, 6.2638, 2.6126, 4.0529, 4.9554, 1.4587, 7.7816,\n",
      "        2.3424, 4.2714, 3.1141, 5.3811, 4.8673, 4.4688, 4.9972, 5.1001, 3.7012,\n",
      "        4.1976, 3.9348, 5.4850, 4.6020, 5.2839, 4.8826, 2.5822, 3.8488, 5.9579,\n",
      "        1.9900, 7.6748, 4.5499, 5.1188, 2.0511, 3.7903, 3.9308, 4.3853, 5.0900,\n",
      "        5.7303, 3.7575, 4.0104, 2.8508, 8.6185, 6.5768, 3.3792, 5.4514, 3.0653,\n",
      "        5.3950, 3.3938, 4.7328, 4.6703, 5.8714, 3.0747, 6.3108, 7.7352, 7.6260,\n",
      "        4.5022, 3.5864]),\n",
      "indices=tensor([7, 1, 7, 0, 9, 7, 0, 6, 9, 0, 8, 1, 6, 2, 5, 3, 5, 4, 6, 5, 7, 6, 6, 7,\n",
      "        4, 1, 0, 7, 0, 1, 6, 2, 2, 3, 8, 4, 6, 5, 9, 6, 7, 7, 6, 8, 1, 0, 4, 1,\n",
      "        2, 4, 0, 3, 0, 4, 9, 5, 7, 6, 1, 7, 7, 1, 0, 9, 3, 9, 2, 4, 1, 5, 4, 5,\n",
      "        1, 7, 8, 2, 5, 6, 1, 1, 7, 5, 9, 3, 4, 7, 1, 6, 5, 6, 5, 4, 1, 3, 9, 2,\n",
      "        5, 6, 4, 6, 0, 4, 1, 1, 9, 3, 6, 8, 5, 8, 7, 2, 0, 0, 1, 1, 8, 4, 2, 5,\n",
      "        8, 6, 3, 4, 3, 7, 7, 8]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 3.2865,  8.3748,  3.1648,  6.7784,  4.8174,  5.0862,  4.6683,  7.5395,\n",
      "         9.1337, 11.8936,  4.9739,  4.0280,  3.7575,  4.8098,  8.4718,  3.2355,\n",
      "         8.2838,  7.2185,  7.0112,  8.1928,  5.9822,  6.3244,  3.3116,  3.8758,\n",
      "         3.4102,  3.1863,  6.7997,  4.3572,  3.4037,  4.6666,  4.0406,  6.2211,\n",
      "         5.0738,  5.9264,  7.2708,  7.4028,  3.6502,  5.9439,  5.1508,  2.8450,\n",
      "         4.5279,  4.7467,  4.4867,  3.4520,  4.0079,  4.4306,  8.3088,  3.7835,\n",
      "         4.9414,  2.7498,  5.0029,  4.3906,  4.4674,  5.9149,  4.7232,  5.5090,\n",
      "         5.4998,  5.6737,  5.5665,  4.5281,  2.9242,  6.7630,  4.1557,  4.9896,\n",
      "         4.3868,  5.6306,  6.2691,  3.6641,  4.0072,  5.2540,  7.2915,  5.3773,\n",
      "         5.3041,  4.3392,  4.3551,  4.0494,  7.4632,  5.1114,  4.4966,  5.3258,\n",
      "         5.1677,  5.5453,  5.8245,  5.6799,  3.8023,  3.3202,  4.7725,  7.5543,\n",
      "         1.4142,  8.8483,  3.0052,  6.0778,  4.2987,  8.9765,  4.2397,  2.3668,\n",
      "         7.3189,  3.5934,  3.7346,  5.7376,  2.8306,  6.3461,  4.5689,  6.6588,\n",
      "         6.1899, 12.4462,  5.8754,  6.3785,  7.3266,  6.6397,  3.2277,  8.4767,\n",
      "         4.0495,  7.3911,  5.7640,  2.3746,  8.6290,  8.5052,  2.7330,  8.9484,\n",
      "         4.8543,  4.4012,  3.9101,  6.5073,  5.6150, 10.8209,  2.9713,  5.8439]),\n",
      "indices=tensor([7, 0, 2, 3, 4, 1, 5, 9, 0, 0, 5, 9, 2, 1, 0, 6, 0, 7, 7, 0, 7, 1, 5, 3,\n",
      "        9, 8, 7, 2, 3, 9, 1, 2, 0, 7, 6, 7, 9, 9, 1, 4, 4, 2, 9, 3, 4, 8, 3, 6,\n",
      "        8, 5, 0, 9, 9, 9, 4, 1, 1, 1, 1, 7, 5, 6, 2, 9, 1, 1, 2, 3, 9, 2, 6, 3,\n",
      "        1, 4, 8, 3, 6, 1, 1, 9, 4, 3, 3, 6, 5, 8, 3, 7, 5, 0, 5, 1, 0, 0, 8, 1,\n",
      "        2, 8, 4, 2, 3, 7, 9, 7, 2, 0, 2, 1, 6, 2, 4, 3, 1, 4, 1, 6, 6, 6, 3, 7,\n",
      "        4, 8, 6, 9, 0, 0, 8, 1]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 5.6196,  4.0392,  5.1225,  7.6533,  6.7586,  7.4587,  9.8294,  3.5035,\n",
      "         7.8271,  9.0921,  5.3610,  8.1161,  4.1735,  6.3402,  4.8682,  6.2321,\n",
      "         5.4571, 11.0641,  3.7534,  6.0096,  2.2148,  8.6068,  4.4287,  7.5250,\n",
      "         4.0177,  6.7432,  4.1210,  7.4082,  3.1700,  9.2642,  1.8432,  9.0996,\n",
      "         6.8742,  5.3499,  2.0211,  6.2882,  5.2174,  6.0472, 11.7426,  6.1910,\n",
      "         4.3297,  5.1516,  3.6346,  5.6591,  3.5802,  5.7333,  2.8829,  6.3699,\n",
      "         7.5098,  5.6852,  4.0087,  3.2241,  3.4554,  4.8885,  4.1704,  7.2547,\n",
      "         6.5742,  6.4676,  6.0816,  5.1949,  4.9895,  4.7660,  7.4708,  7.2700,\n",
      "         3.2030,  7.1324,  5.8084,  7.1962,  5.5113,  9.1121,  6.9865,  8.0361,\n",
      "         5.4837,  5.5869,  4.3807,  3.9615,  4.5818,  4.2022,  5.1279,  5.3862,\n",
      "         4.1536,  6.0711,  4.7838,  5.6623,  4.9646,  4.0590,  7.1899,  3.9883,\n",
      "         8.7031,  4.3193,  6.1917,  2.9173,  3.3318,  6.3242,  7.6502,  5.3066,\n",
      "         4.1444,  4.5013,  5.6341,  6.1406,  4.0203,  6.4434,  6.8174,  5.9190,\n",
      "         3.3080,  5.6216,  2.4349,  6.4365,  4.6739,  7.3375,  5.2901,  6.3251,\n",
      "         3.9697,  5.5785,  3.2475,  7.7698,  2.9054,  5.3016,  5.0154,  7.2899,\n",
      "         6.1591,  4.7930,  5.7277,  5.4062,  6.2304,  7.5283,  7.0827,  4.9027]),\n",
      "indices=tensor([3, 2, 6, 3, 7, 4, 0, 4, 2, 6, 9, 7, 1, 8, 3, 9, 4, 0, 1, 1, 5, 2, 1, 3,\n",
      "        2, 4, 5, 5, 1, 6, 9, 7, 2, 2, 7, 9, 8, 8, 0, 7, 6, 4, 5, 7, 3, 7, 3, 3,\n",
      "        7, 9, 6, 8, 7, 8, 7, 3, 2, 1, 7, 5, 1, 8, 6, 2, 3, 7, 1, 4, 9, 2, 6, 6,\n",
      "        6, 1, 9, 5, 0, 5, 9, 8, 2, 6, 2, 4, 6, 4, 6, 9, 0, 1, 4, 8, 7, 7, 0, 5,\n",
      "        7, 5, 1, 1, 4, 8, 6, 9, 8, 1, 9, 3, 5, 6, 6, 3, 2, 3, 9, 2, 1, 2, 8, 6,\n",
      "        1, 9, 0, 9, 9, 6, 0, 5]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 5.9359,  5.6891,  5.1600,  5.4426,  5.8926,  5.5513,  4.7812,  5.7587,\n",
      "         6.1326,  5.9525,  2.2428,  7.5614,  4.4732,  5.7728,  4.3255,  5.5781,\n",
      "         4.2505,  5.7955,  5.7434,  7.0214,  5.5000,  7.2304,  2.5413,  5.4759,\n",
      "         4.0442,  7.0193,  2.1092,  7.7542,  6.7551,  6.1183,  5.7386,  7.4333,\n",
      "         4.3451,  9.9289,  2.6856,  6.3715,  6.1575,  8.6876,  8.4521,  8.5433,\n",
      "         3.7393,  6.6108,  6.4711,  5.7614,  4.5833,  4.6102,  7.4339,  4.2703,\n",
      "         3.0432, 10.1713,  1.6671,  7.0079,  5.1592,  8.9898,  4.7397,  6.1453,\n",
      "         3.9748,  9.5608,  5.5377,  6.3737,  6.0606,  9.8254,  3.8405,  6.4789,\n",
      "         2.1060,  7.2114,  5.4899,  5.4234,  4.8118,  8.1146,  4.4587,  6.7490,\n",
      "         2.8203,  5.2853,  5.7559,  4.8201,  3.9213,  7.0940,  2.7581, 11.2590,\n",
      "         4.3144,  7.4643,  5.3629,  7.9743,  3.7429,  7.0323,  3.0109,  6.3547,\n",
      "         4.7591,  8.0444,  5.5438,  5.2955,  6.8831,  5.5757,  5.7094,  8.0754,\n",
      "         4.2578,  5.4317,  3.9753,  4.6968,  4.6340,  3.4110,  2.4407,  4.3319,\n",
      "         3.7939,  4.0425,  1.9401,  5.6851,  4.8227,  2.8567,  6.8364,  4.0126,\n",
      "         3.6571,  7.0332,  4.2201,  4.5852,  4.6996,  4.2799,  3.4955,  2.9965,\n",
      "         5.8128,  3.9306,  6.7313,  2.0333,  5.7627,  5.9534,  1.0099,  2.0833]),\n",
      "indices=tensor([6, 5, 1, 3, 4, 3, 4, 8, 7, 1, 9, 6, 4, 8, 2, 1, 4, 9, 6, 7, 4, 6, 1, 8,\n",
      "        6, 3, 1, 7, 7, 4, 3, 7, 9, 0, 7, 9, 0, 0, 6, 0, 4, 3, 2, 7, 4, 9, 7, 3,\n",
      "        9, 0, 5, 2, 8, 0, 1, 1, 1, 0, 9, 1, 6, 0, 1, 4, 8, 0, 6, 1, 0, 0, 2, 4,\n",
      "        8, 7, 2, 9, 3, 2, 9, 0, 6, 6, 4, 2, 1, 6, 9, 2, 1, 2, 0, 9, 4, 9, 1, 0,\n",
      "        2, 1, 4, 2, 2, 5, 8, 4, 3, 5, 4, 6, 1, 7, 7, 1, 9, 0, 0, 1, 3, 2, 6, 3,\n",
      "        7, 4, 4, 5, 2, 6, 8, 1]))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.return_types.max(\n",
      "values=tensor([4.0870, 4.4670, 3.6167, 4.3836, 4.9019, 5.4303, 4.8192, 3.3286, 5.6554,\n",
      "        3.8559, 2.9355, 5.2888, 5.9325, 7.3629, 5.2328, 3.8773, 3.4561, 8.7971,\n",
      "        3.1636, 4.6911, 4.5264, 5.4310, 3.7212, 3.8834, 4.1038, 3.9370, 4.0202,\n",
      "        4.0179, 2.2607, 2.6316, 4.4872, 3.8074, 5.5637, 3.6563, 4.6338, 4.1808,\n",
      "        5.5470, 4.9078, 5.1493, 3.1111, 8.3253, 3.1300, 8.2841, 5.6075, 5.9606,\n",
      "        4.2669, 4.2559, 2.8738, 4.2070, 3.2413, 4.0075, 3.5009, 3.3341, 5.1356,\n",
      "        6.8131, 5.1727, 3.1886, 4.8216, 5.7311, 3.3648, 4.8023, 5.9022, 6.1295,\n",
      "        2.0569, 3.0250, 3.2841, 3.2767, 6.1878, 2.8827, 4.1425, 5.9100, 5.9497,\n",
      "        5.3842, 2.0161, 4.5959, 3.6000, 3.4872, 6.0349, 3.1454, 1.4896, 3.0945,\n",
      "        2.2580, 3.2342, 3.9188, 3.6195, 5.3696, 5.4936, 3.6554, 4.1131, 5.3853,\n",
      "        2.9768, 7.0664, 3.1355, 3.3924, 3.8558, 4.2918, 6.1882, 3.0779, 7.0991,\n",
      "        3.3169, 5.0306, 4.4990, 5.3630, 2.1895, 3.3193, 3.9407, 6.3907, 3.2610,\n",
      "        7.1193, 6.4011, 3.6278, 7.6406, 2.7697, 3.9854, 3.0794, 7.4997, 8.4302,\n",
      "        3.5019, 3.7124, 5.9450, 5.6807, 4.4855, 5.1616, 5.7102, 4.7896, 5.7852,\n",
      "        3.5207, 3.2932]),\n",
      "indices=tensor([6, 1, 3, 0, 3, 1, 2, 2, 0, 5, 0, 1, 3, 7, 3, 4, 4, 7, 5, 7, 4, 9, 1, 8,\n",
      "        7, 0, 9, 1, 6, 6, 4, 8, 0, 4, 3, 2, 6, 6, 2, 6, 0, 4, 7, 1, 7, 8, 4, 7,\n",
      "        7, 5, 2, 5, 8, 1, 6, 4, 1, 1, 8, 2, 4, 6, 7, 2, 7, 6, 6, 2, 4, 2, 1, 6,\n",
      "        7, 9, 2, 9, 8, 6, 0, 8, 6, 1, 4, 0, 9, 3, 2, 8, 5, 1, 5, 7, 1, 6, 2, 8,\n",
      "        2, 0, 7, 7, 6, 4, 5, 1, 3, 0, 3, 9, 2, 0, 5, 0, 2, 2, 1, 7, 0, 4, 6, 1,\n",
      "        2, 0, 3, 1, 7, 0, 3, 4]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 4.6150,  1.4742,  4.5969,  4.6297,  3.2930,  7.9286,  4.8688,  3.2275,\n",
      "         3.5917,  3.5638,  4.4988,  2.4087,  2.7787,  4.4992,  5.2685,  4.7846,\n",
      "        10.3428,  4.2387,  2.2967,  5.6369,  7.8659,  4.4267,  4.1488,  4.7073,\n",
      "         5.2376,  5.0302,  3.1862,  2.9403,  5.8943,  3.3071,  5.2039,  7.7964,\n",
      "         6.3033,  6.0858,  5.8603,  3.4818,  4.4510,  4.9253,  4.0099,  5.0415,\n",
      "         4.6052,  3.0421,  4.2964,  8.5037,  3.0515,  5.4643,  3.3040,  5.7904,\n",
      "         4.8691, 10.3620,  2.9238,  6.0596,  6.5678,  3.0284,  2.9589,  4.6550,\n",
      "         5.8404,  3.7888,  5.4502,  2.5688,  5.1202,  8.8778,  4.0368,  6.1027,\n",
      "         6.9635,  5.8014,  5.3609,  5.4178,  4.1229, 11.1596,  1.1998,  3.8254,\n",
      "         4.1142,  5.3217,  4.0137,  3.8973,  3.5294,  5.6690,  4.5851,  2.2405,\n",
      "         2.0928,  7.7407,  5.3984,  3.9637,  3.1791,  5.9556,  5.1757,  6.3449,\n",
      "         5.5681,  5.2496,  4.2861,  3.4722,  5.4174,  5.1739,  4.5180,  7.3956,\n",
      "         3.7128,  4.5857,  2.7896,  8.0011,  3.8911,  4.9619,  3.5821,  7.1420,\n",
      "         4.9660,  8.9516,  1.6528,  4.7838,  4.6098,  8.8121,  5.0551,  5.3574,\n",
      "         2.3413,  6.1151,  8.0200,  4.0304,  3.5742,  5.4049,  5.5790,  4.8544,\n",
      "         3.1448,  3.7565,  4.9870,  3.2398,  2.6556,  7.0599,  5.7175,  5.4269]),\n",
      "indices=tensor([3, 0, 3, 1, 6, 0, 1, 4, 7, 7, 5, 4, 1, 2, 8, 0, 0, 6, 2, 2, 0, 6, 4, 2,\n",
      "        2, 2, 7, 9, 6, 9, 9, 0, 8, 1, 1, 8, 4, 3, 1, 4, 6, 8, 6, 6, 8, 7, 2, 8,\n",
      "        3, 0, 9, 1, 1, 4, 4, 3, 1, 4, 2, 3, 9, 6, 1, 7, 6, 8, 1, 9, 1, 0, 7, 1,\n",
      "        1, 2, 8, 3, 8, 4, 1, 4, 5, 6, 2, 2, 8, 8, 5, 9, 3, 8, 1, 8, 6, 4, 0, 7,\n",
      "        6, 8, 3, 6, 1, 3, 6, 4, 4, 0, 9, 9, 3, 7, 7, 1, 8, 9, 0, 8, 2, 8, 0, 9,\n",
      "        5, 7, 7, 5, 3, 0, 2, 9]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 3.9548,  6.5456,  5.8253,  1.8422,  2.3913,  5.2823,  3.3010,  5.6117,\n",
      "         0.9898,  2.2810,  4.1406,  9.8814,  6.2425,  6.4916,  5.5868,  2.8592,\n",
      "         6.7022,  6.3475,  3.4927,  4.4313,  8.4181,  5.9471,  4.5762,  5.9052,\n",
      "         4.0489,  8.4529,  2.9234,  3.9979,  3.1527,  6.2224,  4.5238,  2.1430,\n",
      "         4.8056,  6.1909,  2.2537,  7.0399,  4.9681,  3.0990,  6.4194,  5.0032,\n",
      "         2.9188,  5.9250,  3.6522,  3.9659,  4.1689,  5.9505,  6.2646,  9.0331,\n",
      "         5.9271, 10.8483,  4.4223,  9.0704,  3.5632,  7.8546,  5.0255,  2.5063,\n",
      "         5.8007,  6.0511,  4.2136,  7.7549,  3.8064,  6.0706,  2.2055,  7.8400,\n",
      "         7.0184,  7.3780,  5.3712,  5.5738,  6.4028,  3.2728,  5.5469,  1.6872,\n",
      "         5.8318,  2.7438,  4.2526,  2.4783,  5.9321,  9.7838,  2.0212,  7.7489,\n",
      "         4.3173,  6.4156,  3.6793, 12.1368,  4.3922,  2.2905,  8.7357,  5.8606,\n",
      "         3.8189,  4.3715,  6.1257,  3.9642,  1.6082,  3.1265,  4.5437,  5.2050,\n",
      "         5.5536,  5.1860,  4.3595,  3.6913,  2.4248,  6.0385,  4.8667,  8.2740,\n",
      "         6.3683,  5.5297,  3.6028, 10.8902,  3.7880,  3.2736,  3.0446,  5.8686,\n",
      "         6.7069,  7.4298,  5.5895,  4.8197,  7.5132,  5.7678,  4.9145,  3.2480,\n",
      "         3.4260,  5.9221,  7.1040,  3.0846,  8.0247,  3.0685,  3.5998,  4.4221]),\n",
      "indices=tensor([8, 4, 6, 8, 9, 4, 8, 6, 7, 8, 8, 0, 2, 6, 4, 9, 7, 1, 6, 1, 7, 1, 3, 1,\n",
      "        2, 7, 5, 0, 8, 4, 3, 8, 6, 9, 0, 4, 8, 6, 2, 8, 1, 4, 6, 2, 4, 9, 1, 7,\n",
      "        7, 0, 3, 0, 9, 7, 7, 5, 5, 1, 8, 7, 1, 6, 8, 6, 2, 6, 9, 8, 1, 2, 0, 6,\n",
      "        1, 8, 1, 0, 9, 7, 9, 7, 8, 4, 6, 0, 8, 9, 0, 4, 4, 2, 2, 3, 7, 9, 0, 3,\n",
      "        1, 1, 5, 3, 7, 9, 5, 6, 3, 1, 5, 0, 9, 5, 5, 9, 2, 6, 1, 9, 7, 8, 4, 8,\n",
      "        8, 8, 7, 5, 6, 5, 9, 8]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 7.7017,  9.6353,  8.0921,  3.7476,  2.9086,  6.5272,  6.0676,  4.1394,\n",
      "         2.2769,  7.7503,  3.8924,  3.5902,  5.2456,  8.9018,  6.0777,  5.7038,\n",
      "         5.8715,  5.8654,  3.2972,  3.7178,  3.7439,  7.3193,  6.2358,  6.9992,\n",
      "         2.7859,  7.7712,  3.0947,  4.3735,  7.0609,  7.5423,  3.5299,  5.6462,\n",
      "         5.5491,  4.9215,  4.2509,  4.5636,  2.2483,  6.1543,  3.2212,  8.7310,\n",
      "         3.1027,  4.0662,  4.7098,  3.0073,  2.9800,  9.4716,  7.8721,  5.1342,\n",
      "         2.5101,  6.0646,  2.8649,  4.4720,  3.2824,  6.6686,  5.5132,  9.0785,\n",
      "         5.0346,  4.2779,  3.7797,  3.4739,  6.9871,  2.6967,  3.8417,  5.5667,\n",
      "         5.0851,  5.4802,  3.3147,  4.9638,  4.5841,  5.9083,  4.5039,  5.0548,\n",
      "         5.9248,  4.7561,  4.2183,  4.7071,  2.2592,  6.4529,  2.3871,  4.9461,\n",
      "         2.3795,  8.0901,  5.4693,  3.8640,  2.5037,  5.8654,  1.9691,  5.6659,\n",
      "         5.8323,  4.3863,  5.8081,  5.9211,  5.0812,  2.4317,  6.0325,  3.4500,\n",
      "         1.1977,  7.8500,  2.2979,  5.4688,  3.1381,  7.3829, 10.0632,  7.4130,\n",
      "         4.9304,  3.9760,  5.5413,  6.5859,  5.9734,  2.1301,  3.7028,  5.9860,\n",
      "         3.6297,  9.7847,  4.6330,  4.4720,  6.7357, 10.3728,  3.8157,  2.8460,\n",
      "         3.7469,  2.1790,  4.5495,  8.7303,  2.4090,  6.6282,  4.3847,  4.9009]),\n",
      "indices=tensor([2, 0, 7, 3, 0, 0, 4, 3, 1, 6, 8, 8, 3, 0, 5, 1, 2, 2, 8, 3, 8, 4, 7, 6,\n",
      "        5, 7, 1, 8, 5, 0, 7, 1, 3, 2, 6, 3, 3, 4, 8, 6, 8, 9, 5, 8, 0, 0, 0, 1,\n",
      "        4, 2, 5, 3, 0, 4, 9, 6, 8, 7, 4, 8, 2, 8, 4, 1, 3, 7, 2, 2, 1, 4, 9, 1,\n",
      "        4, 4, 9, 1, 2, 4, 8, 9, 6, 6, 9, 8, 9, 4, 2, 7, 1, 8, 1, 4, 7, 3, 9, 8,\n",
      "        5, 6, 2, 7, 8, 0, 0, 6, 1, 1, 1, 6, 1, 9, 3, 7, 5, 0, 8, 1, 7, 0, 7, 8,\n",
      "        4, 1, 1, 0, 1, 6, 5, 1]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 4.3108,  1.2907,  7.3871,  4.6155,  5.1278,  5.5049,  6.2574,  6.4068,\n",
      "         3.6894,  4.4640,  4.1882,  3.7022, 12.3132,  7.2456,  4.1674,  7.2149,\n",
      "         6.3889,  4.6059,  3.8266,  8.9917,  3.7586,  9.3963,  4.4106,  2.8897,\n",
      "         5.0966,  4.0643,  3.6810,  8.0504,  4.2247,  2.1235,  7.4359,  6.0342,\n",
      "         3.0687,  5.2928,  7.2100,  4.7283,  3.4815,  6.5747,  4.7917,  4.7729,\n",
      "         4.6254,  6.1504,  2.0801,  9.6342,  3.1316,  4.1615,  3.7235,  5.5712,\n",
      "         1.1409,  3.7128,  4.1385,  3.9533,  5.6617,  4.8170,  4.0166,  6.7426,\n",
      "         9.9678,  8.8356,  5.7289,  3.6838,  3.9568,  7.8824,  3.9063,  5.6171,\n",
      "         1.9564,  5.1452,  4.8830,  4.6596,  4.7218,  5.4647,  5.3267,  4.8217,\n",
      "         3.6706,  6.0977,  6.2500,  1.3868,  3.8261,  6.1794,  2.6065,  5.0817,\n",
      "         3.5762,  5.5531,  4.8452,  5.2456,  3.7964,  3.4331,  4.1419,  4.9014,\n",
      "         4.6699,  6.1831,  8.1467,  5.8909,  4.0680,  7.6686,  3.9707,  5.1927,\n",
      "         3.9379,  8.2542,  4.7020,  7.1909,  3.1739,  5.8380,  5.4075,  4.2324,\n",
      "         6.3588,  7.2357,  5.0872,  5.6402,  3.2928,  1.9858,  3.7401,  7.1238,\n",
      "         3.7282,  7.4180,  4.8203,  5.0982,  5.0635,  4.4721,  5.2093,  8.9282,\n",
      "         2.3793,  4.8398,  6.3645,  7.4553,  3.3637,  5.8689,  6.2785,  5.0768]),\n",
      "indices=tensor([5, 5, 9, 8, 9, 4, 1, 2, 8, 3, 7, 9, 0, 7, 7, 6, 0, 9, 2, 0, 5, 6, 4, 8,\n",
      "        2, 3, 4, 7, 6, 5, 6, 3, 7, 1, 7, 8, 9, 2, 9, 2, 8, 3, 7, 0, 5, 2, 8, 9,\n",
      "        9, 4, 9, 9, 3, 7, 4, 0, 0, 0, 7, 2, 4, 7, 3, 4, 4, 9, 1, 9, 5, 2, 0, 8,\n",
      "        5, 1, 7, 5, 9, 6, 4, 9, 4, 8, 3, 3, 2, 8, 8, 3, 4, 6, 0, 7, 5, 0, 8, 4,\n",
      "        3, 0, 0, 0, 4, 1, 7, 2, 1, 3, 3, 4, 1, 8, 1, 6, 8, 7, 1, 8, 2, 9, 6, 0,\n",
      "        8, 1, 2, 2, 9, 3, 1, 4]))\n",
      "torch.return_types.max(\n",
      "values=tensor([8.2829, 2.7892, 2.4969, 6.7147, 6.6184, 8.0220, 5.0251, 5.4840, 5.8134,\n",
      "        3.7660, 3.7345, 8.5251, 4.3856, 5.8191, 2.4189, 4.7105, 2.7748, 4.6005,\n",
      "        4.6537, 5.7928, 4.3083, 4.2440, 4.7944, 5.4274, 4.9592, 9.0537, 6.5271,\n",
      "        7.2125, 5.1192, 3.6263, 3.8996, 7.2580, 6.9722, 5.3928, 5.2116, 2.9454,\n",
      "        3.4600, 5.9376, 4.4813, 5.9275, 5.4843, 5.3370, 2.9547, 5.4288, 5.8445,\n",
      "        5.3349, 5.1889, 5.6198, 6.1638, 3.7289, 3.1098, 3.9727, 7.8566, 6.6732,\n",
      "        7.3824, 5.8959, 2.8341, 7.3060, 4.4443, 9.7648, 5.6501, 8.1076, 6.4719,\n",
      "        5.4296, 6.1131, 5.2078, 5.2065, 6.3992, 4.9094, 4.0355, 1.8614, 3.3315,\n",
      "        5.7554, 4.7650, 6.1850, 7.6876, 3.4523, 5.8063, 5.4466, 8.1638, 3.3272,\n",
      "        5.2950, 3.8809, 5.0246, 4.9492, 4.5888, 4.4124, 5.8282, 5.7524, 3.4570,\n",
      "        8.1307, 5.8986, 3.8096, 5.9614, 4.1404, 6.5950, 3.4368, 5.7245, 3.8119,\n",
      "        5.6995, 4.3395, 9.5184, 4.4147, 7.7661, 9.8491, 2.8066, 4.0710, 4.8636,\n",
      "        5.7249, 4.9320, 4.2059, 4.4889, 4.5283, 3.7857, 3.9801, 5.7110, 6.1587,\n",
      "        3.8881, 3.4592, 5.1620, 5.6301, 5.5008, 6.1098, 5.0562, 5.3666, 6.1435,\n",
      "        7.0287, 5.1785]),\n",
      "indices=tensor([0, 5, 8, 6, 3, 7, 7, 8, 6, 9, 7, 0, 2, 1, 9, 2, 0, 3, 4, 4, 1, 9, 0, 1,\n",
      "        5, 0, 0, 0, 5, 3, 3, 6, 0, 1, 4, 4, 4, 3, 2, 2, 7, 9, 7, 1, 7, 2, 3, 1,\n",
      "        3, 2, 4, 4, 0, 0, 3, 1, 4, 3, 9, 0, 2, 6, 2, 2, 7, 9, 1, 1, 9, 9, 4, 0,\n",
      "        8, 0, 3, 0, 0, 1, 6, 0, 5, 1, 5, 4, 3, 5, 5, 7, 6, 8, 7, 3, 8, 4, 6, 7,\n",
      "        0, 1, 4, 1, 5, 0, 2, 7, 0, 9, 2, 4, 1, 4, 9, 4, 8, 7, 9, 5, 0, 8, 9, 3,\n",
      "        1, 4, 4, 4, 4, 3, 0, 2]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 3.0265,  4.8031,  6.1312,  4.2244,  6.1315,  2.9739,  2.6050,  7.7919,\n",
      "         4.0139,  4.6692,  4.1467,  4.5072,  5.8473,  6.5790,  1.9708,  4.8476,\n",
      "         7.2702,  5.0347,  4.9867,  5.4839,  2.4515,  6.2186,  2.4208,  3.5995,\n",
      "         5.2809,  6.1432,  3.3016,  7.4108,  6.2953,  5.1184,  3.3492,  8.9489,\n",
      "         3.5487,  4.1456,  7.5961,  2.6077,  2.8592,  5.4717,  6.9505,  4.8994,\n",
      "         1.8432,  2.6864,  5.5434,  5.7007,  4.2232,  3.7417,  7.8780,  6.0777,\n",
      "         3.1691,  5.4816,  3.7928,  2.5148,  2.4308,  3.2146,  7.5135,  4.7354,\n",
      "         5.5690,  5.1251,  4.5217,  4.6619,  5.2058,  3.1780,  4.7829,  5.3205,\n",
      "         4.7808,  5.5735,  3.0733,  6.2004, 10.4726,  5.3767,  5.1623,  3.2309,\n",
      "         5.8768,  2.2286,  2.6786,  5.3624,  4.9830,  8.8454,  7.5681,  5.3671,\n",
      "         6.4601,  8.9050,  3.7337,  5.5460,  4.7705,  5.5424,  2.8337,  9.1533,\n",
      "         4.5760,  6.5957,  3.1605,  4.3294,  3.5162,  6.2048,  3.5465,  5.2056,\n",
      "         4.9207,  5.8545,  3.9865,  6.6222,  2.5260,  5.4698,  3.6517,  2.8615,\n",
      "         4.0811,  6.1897,  5.7226,  3.1765,  2.0523,  5.5208,  4.5128,  2.6543,\n",
      "         3.9967,  4.0495,  1.5971,  4.5672,  4.2086,  8.9586,  3.0874,  7.8042,\n",
      "         4.6129,  4.5378,  4.9143,  6.7364,  4.8643,  6.0773,  2.7183,  5.2541]),\n",
      "indices=tensor([9, 3, 4, 4, 0, 5, 9, 6, 8, 7, 5, 1, 1, 0, 0, 1, 6, 0, 3, 3, 7, 4, 1, 5,\n",
      "        3, 6, 1, 7, 1, 8, 8, 0, 3, 1, 7, 4, 9, 3, 2, 4, 9, 0, 1, 6, 2, 7, 0, 0,\n",
      "        2, 9, 8, 8, 4, 0, 7, 9, 2, 8, 3, 9, 6, 3, 1, 4, 8, 1, 5, 7, 0, 7, 6, 3,\n",
      "        4, 7, 7, 1, 9, 0, 6, 0, 0, 0, 8, 1, 6, 2, 3, 6, 9, 3, 9, 7, 7, 7, 9, 4,\n",
      "        3, 6, 3, 6, 8, 6, 8, 4, 3, 9, 0, 1, 4, 7, 3, 5, 5, 8, 7, 2, 3, 0, 8, 0,\n",
      "        4, 1, 5, 7, 8, 6, 4, 3]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 2.8261,  2.1428,  4.8666,  5.3441,  9.8792,  6.6945,  2.0129,  2.4614,\n",
      "         3.7364,  5.0383,  3.9602,  3.7367,  6.3347,  6.2062,  3.9095,  5.8952,\n",
      "         2.6309,  4.4782,  4.6152,  6.3701,  4.0613,  3.2711,  5.2754,  4.5949,\n",
      "         5.7807,  4.6527,  6.4050,  4.8686,  2.4227,  4.1751,  6.0303,  9.4259,\n",
      "         3.4509,  1.6075,  5.5140,  3.2711,  1.7827,  5.6926,  4.1991,  4.8975,\n",
      "         5.0708,  6.4540,  3.3162,  4.2973,  5.6397,  5.6513,  2.6236,  3.7284,\n",
      "         5.6606,  4.2683,  4.8604,  7.2573,  2.2701,  6.5975,  5.4718,  6.3069,\n",
      "         3.1317,  1.9285,  3.7089,  6.1746,  6.4993,  6.3821,  6.8337,  2.8961,\n",
      "         5.1961,  5.0701,  7.1494,  4.1856,  4.3897,  4.0416,  3.3218,  4.9604,\n",
      "         1.9216,  7.0539,  4.2305,  4.4546,  4.2690,  4.8857,  5.4206,  2.3822,\n",
      "         4.2660,  7.0826,  3.7915,  5.4399,  2.2227,  5.1010,  5.5052,  6.2992,\n",
      "         5.0461,  3.1871,  5.2413,  2.9202,  4.8041,  7.4783,  8.0733,  7.6772,\n",
      "         3.6555,  5.8200,  2.8153,  4.1337, 10.2218,  8.6197,  1.7446,  5.7477,\n",
      "         4.4800,  6.7501,  3.4005,  7.0996,  5.8902,  2.0415,  2.4514,  3.9140,\n",
      "         2.2345,  6.7864,  3.7339,  6.0604,  4.9105,  4.4455,  7.0173,  4.1354,\n",
      "         5.4077,  7.4797,  4.9508,  5.2493,  6.3478,  6.0768,  3.3331,  5.5475]),\n",
      "indices=tensor([3, 4, 3, 1, 6, 7, 5, 3, 9, 1, 1, 3, 4, 9, 3, 1, 7, 7, 4, 6, 1, 8, 6, 4,\n",
      "        2, 3, 1, 1, 7, 4, 7, 0, 9, 5, 4, 3, 5, 6, 4, 7, 7, 6, 5, 1, 2, 7, 3, 4,\n",
      "        0, 4, 5, 7, 8, 2, 5, 2, 8, 9, 5, 7, 2, 7, 6, 5, 8, 4, 2, 8, 6, 3, 4, 4,\n",
      "        1, 0, 2, 8, 8, 9, 1, 8, 1, 0, 7, 1, 3, 2, 0, 3, 8, 4, 4, 0, 9, 6, 0, 7,\n",
      "        7, 8, 9, 9, 0, 0, 8, 1, 3, 2, 3, 3, 2, 9, 2, 5, 5, 6, 9, 7, 9, 8, 7, 9,\n",
      "        3, 0, 6, 1, 2, 2, 4, 3]))\n",
      "torch.return_types.max(\n",
      "values=tensor([4.7616, 3.8274, 5.7266, 1.4120, 5.1244, 6.5178, 1.9148, 6.0252, 3.7555,\n",
      "        4.3971, 4.2552, 3.8793, 3.6946, 6.6672, 5.2066, 6.2197, 2.9337, 5.4967,\n",
      "        5.4893, 3.3356, 3.7559, 6.0470, 5.6957, 5.3417, 3.4083, 3.6699, 6.1560,\n",
      "        3.4843, 2.5528, 4.2768, 5.2826, 5.1490, 7.6590, 5.7569, 3.8999, 8.4720,\n",
      "        3.8267, 4.9477, 4.5689, 4.1130, 3.8570, 2.6263, 5.1545, 6.4201, 4.6476,\n",
      "        5.7832, 2.6408, 2.0617, 2.7056, 5.4620, 3.9557, 6.4116, 4.7540, 4.5812,\n",
      "        5.8362, 3.4655, 4.0064, 4.9303, 6.2669, 6.9206, 6.3809, 6.7193, 5.5279,\n",
      "        7.2003, 4.6599, 6.0850, 3.9774, 5.1815, 4.4744, 7.3080, 2.5304, 5.7641,\n",
      "        4.6026, 7.7290, 3.6851, 5.2141, 9.2012, 9.1164, 2.7830, 4.4090, 1.5998,\n",
      "        3.8762, 5.4851, 3.6332, 4.1988, 3.4240, 3.5183, 6.2661, 5.7549, 4.3687,\n",
      "        2.5212, 4.2424, 6.3194, 5.4417, 3.9043, 3.9752, 5.8570, 5.0766, 6.7620,\n",
      "        5.3377, 3.7013, 3.4028, 8.1968, 6.7006, 3.7332, 4.3441, 3.4281, 7.2616,\n",
      "        2.8932, 3.6877, 2.7269, 5.5154, 3.6593, 6.4736, 3.6079, 7.7384, 2.6142,\n",
      "        2.7429, 5.6299, 4.3821, 3.4216, 4.9938, 3.4731, 5.9837, 7.8485, 5.8602,\n",
      "        3.7950, 6.2411]),\n",
      "indices=tensor([3, 4, 1, 5, 3, 6, 5, 7, 2, 8, 3, 7, 3, 7, 1, 2, 8, 9, 8, 9, 6, 2, 0, 9,\n",
      "        1, 8, 4, 4, 5, 5, 2, 8, 2, 8, 1, 0, 2, 3, 1, 5, 7, 4, 5, 3, 8, 3, 6, 5,\n",
      "        4, 1, 2, 7, 9, 8, 7, 9, 4, 5, 7, 7, 2, 2, 8, 6, 4, 6, 9, 7, 1, 7, 8, 7,\n",
      "        9, 0, 8, 1, 0, 0, 8, 1, 1, 6, 5, 5, 5, 5, 6, 2, 0, 9, 3, 3, 1, 1, 9, 4,\n",
      "        4, 8, 9, 8, 3, 7, 0, 3, 1, 8, 6, 2, 4, 9, 5, 1, 1, 2, 5, 6, 2, 5, 6, 9,\n",
      "        1, 1, 9, 2, 7, 2, 3, 7]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 6.1740,  5.5694,  5.5114,  6.7541,  4.3365,  4.8506,  4.7100,  5.5654,\n",
      "         3.8449,  5.0431,  5.1713,  8.1305,  3.4766,  5.0172,  3.1678,  7.5423,\n",
      "         2.2204,  9.4227,  4.6452,  3.4323,  3.0412,  9.8932,  6.1993,  5.3642,\n",
      "         3.9770,  4.7190,  2.9429,  4.4127,  4.1994,  6.3164,  5.0355,  5.2275,\n",
      "         3.0299,  2.6799,  3.9740,  6.0548,  5.5817,  4.3247,  5.2282,  5.4505,\n",
      "         7.5364, 10.0070,  4.7084,  4.8441,  2.7468,  5.0092,  4.9436,  4.5711,\n",
      "         4.8589,  5.3635,  2.8626,  5.2085,  6.5188,  7.5689,  8.6424,  4.0054,\n",
      "         5.6324,  7.6624,  5.1019,  5.6269,  2.3037,  4.3507,  3.8231,  5.7744,\n",
      "         4.7929,  5.6872,  1.4820,  1.6719,  4.8881,  4.6191,  2.9915,  4.3304,\n",
      "         4.6146,  5.1082,  3.3701,  4.3061,  8.4047,  6.0723,  6.7732,  4.3467,\n",
      "         2.2153,  6.8342,  4.0225,  6.3081,  8.7516,  7.0646,  4.3459,  6.0407,\n",
      "         2.0540,  7.6584,  5.1082,  5.3787,  9.6121,  5.1614,  7.4786,  5.4350,\n",
      "         6.0881,  4.5177,  2.8514,  4.7030,  3.3159,  6.1952,  4.2267,  5.5408,\n",
      "         3.4209,  6.5789,  6.7888,  1.9902,  6.0037,  4.9417,  3.9743,  2.9736,\n",
      "         3.8219,  3.0639,  3.3893,  4.9827,  4.4145,  7.6908,  2.7272,  7.9188,\n",
      "         5.3239,  4.9878,  5.6905,  6.2750,  6.5951,  3.3456,  2.9434,  5.8974]),\n",
      "indices=tensor([6, 9, 1, 7, 0, 4, 3, 9, 8, 1, 4, 0, 9, 9, 8, 7, 9, 0, 7, 5, 9, 0, 2, 3,\n",
      "        8, 8, 7, 9, 4, 6, 1, 1, 2, 9, 3, 3, 2, 6, 2, 2, 0, 0, 9, 9, 2, 8, 7, 1,\n",
      "        4, 3, 7, 1, 6, 0, 0, 9, 1, 0, 4, 1, 8, 2, 4, 5, 1, 4, 3, 8, 1, 6, 6, 7,\n",
      "        6, 8, 4, 9, 0, 0, 6, 1, 3, 2, 5, 3, 0, 4, 2, 5, 5, 6, 1, 7, 0, 8, 0, 9,\n",
      "        0, 0, 5, 1, 0, 2, 5, 3, 7, 4, 5, 5, 9, 6, 9, 9, 8, 8, 3, 4, 7, 0, 5, 0,\n",
      "        3, 7, 7, 2, 9, 4, 1, 2]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 2.0931,  6.6839,  1.8564,  3.8386,  4.4690,  3.3336,  4.7310,  5.1399,\n",
      "         3.9693,  5.3298,  1.5192,  2.8448,  4.3429,  5.8282,  8.1791,  5.3746,\n",
      "         3.1770,  5.8286,  3.6060,  6.6512,  5.1392,  6.1092,  3.6710,  7.0180,\n",
      "         3.8883,  4.1519,  5.5011,  7.3833,  4.0832,  3.2244,  3.6056,  3.7829,\n",
      "         3.0033,  4.9150,  3.5582,  6.1125,  4.4880,  4.9790,  2.5011,  3.6578,\n",
      "         5.3488,  5.1575,  3.6723,  2.6643, 11.7945,  6.3716,  7.0776,  2.8466,\n",
      "         6.2861,  3.9959,  5.3927,  5.1291,  7.1255,  3.7690,  8.4124,  5.1297,\n",
      "         4.1511,  5.8382,  5.5838,  4.5663,  3.2056,  4.1357,  4.2846,  5.3530,\n",
      "         2.8079,  6.7747,  5.9666,  1.8527,  2.3767,  3.9339,  1.4175,  2.8814,\n",
      "         5.1526,  5.0190,  7.2870,  3.0165,  4.7639,  3.9241,  5.6683,  3.5472,\n",
      "         3.9305,  4.0422,  3.1857,  1.7658,  3.8790,  2.7510,  3.4367,  5.6365,\n",
      "         4.5008,  4.5462,  7.5345,  3.7631,  4.7534,  3.4594,  3.2886,  3.1565,\n",
      "         4.5793,  3.0169,  1.7355,  2.4185,  6.9709,  4.4500,  1.2835,  5.2615,\n",
      "         8.3290,  7.1863,  3.8207,  7.5512,  3.4872,  4.3211,  4.3019,  4.6924,\n",
      "         7.7645,  4.2606,  4.1630,  5.6195,  4.0252,  4.8925,  3.2962,  4.6856,\n",
      "         4.5051,  6.8395,  3.5327,  1.0705,  6.1236,  4.9423,  5.4775,  5.5099]),\n",
      "indices=tensor([5, 6, 9, 5, 2, 5, 4, 5, 6, 7, 8, 5, 1, 6, 0, 6, 2, 4, 7, 3, 4, 2, 4, 6,\n",
      "        5, 6, 0, 3, 8, 5, 9, 0, 8, 3, 0, 0, 0, 1, 3, 4, 3, 4, 0, 0, 0, 3, 3, 5,\n",
      "        3, 4, 6, 1, 3, 9, 7, 1, 5, 2, 7, 1, 3, 3, 7, 9, 6, 2, 8, 7, 9, 7, 2, 9,\n",
      "        8, 4, 4, 2, 5, 5, 4, 8, 9, 6, 9, 6, 2, 5, 8, 9, 3, 4, 2, 1, 3, 1, 3, 5,\n",
      "        9, 0, 4, 6, 6, 9, 8, 1, 7, 3, 3, 2, 9, 3, 2, 1, 0, 9, 4, 0, 3, 9, 6, 1,\n",
      "        3, 0, 2, 1, 5, 8, 1, 2]))\n",
      "torch.return_types.max(\n",
      "values=tensor([4.8126, 4.4592, 5.2477, 2.6620, 2.9354, 6.5293, 4.6770, 5.9194, 2.2669,\n",
      "        8.0700, 5.5790, 6.4197, 7.1343, 4.0655, 5.3212, 5.6734, 3.4425, 6.0466,\n",
      "        8.1675, 8.0822, 4.9933, 4.4459, 3.8603, 3.3207, 3.4333, 9.1535, 2.0761,\n",
      "        6.2730, 5.5823, 6.9045, 3.4722, 5.0792, 5.6284, 5.6789, 2.3530, 4.1339,\n",
      "        6.5566, 7.1335, 2.1878, 6.8551, 4.0863, 4.7087, 5.0200, 5.5290, 5.3318,\n",
      "        6.8886, 3.4564, 6.0848, 4.1090, 5.1282, 4.3665, 5.8084, 7.6456, 5.3519,\n",
      "        4.6939, 5.6735, 5.4269, 7.6243, 2.5751, 6.1679, 5.6885, 5.4341, 7.7939,\n",
      "        3.4189, 3.7747, 6.6691, 3.2767, 2.9263, 4.9196, 5.7519, 4.9454, 6.0042,\n",
      "        3.8933, 6.1003, 4.1347, 6.1387, 3.6849, 5.5804, 6.1216, 4.0885, 7.7994,\n",
      "        5.0379, 4.0734, 4.4304, 4.5856, 3.7493, 5.2217, 6.0480, 4.3099, 4.2260,\n",
      "        2.3524, 2.7847, 4.2997, 4.1433, 2.6539, 2.8495, 4.5373, 4.6439, 4.8450,\n",
      "        5.5689, 6.7572, 3.8061, 4.3177, 4.4260, 4.0197, 5.1712, 3.7645, 4.2447,\n",
      "        6.6115, 5.1651, 8.2844, 4.2112, 3.6920, 6.5949, 3.8596, 5.6589, 1.9428,\n",
      "        5.1157, 8.7682, 4.8615, 6.4806, 4.6452, 3.2564, 5.9283, 7.2320, 7.4614,\n",
      "        4.0778, 5.0448]),\n",
      "indices=tensor([7, 9, 4, 9, 1, 0, 0, 1, 8, 2, 4, 3, 0, 9, 2, 5, 4, 6, 7, 7, 4, 8, 7, 9,\n",
      "        8, 0, 5, 1, 6, 2, 3, 3, 2, 4, 4, 5, 8, 6, 6, 7, 8, 8, 9, 9, 3, 0, 5, 1,\n",
      "        9, 2, 9, 3, 7, 4, 6, 5, 7, 6, 9, 7, 4, 8, 4, 5, 8, 6, 8, 8, 1, 1, 9, 7,\n",
      "        2, 2, 9, 4, 6, 1, 3, 4, 7, 1, 9, 4, 3, 4, 1, 6, 3, 8, 2, 4, 6, 5, 8, 6,\n",
      "        8, 7, 0, 3, 6, 4, 8, 3, 6, 3, 5, 5, 6, 6, 6, 7, 3, 0, 1, 6, 9, 1, 0, 6,\n",
      "        8, 8, 7, 7, 2, 0, 9, 1]))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.return_types.max(\n",
      "values=tensor([ 5.5455,  3.4633,  3.8846,  5.4820,  7.4810,  7.9270,  2.8691,  4.4838,\n",
      "         8.6481,  4.3264,  7.0146,  7.2107,  5.4690,  4.8780,  6.1883,  5.5554,\n",
      "         5.5174,  4.2861,  6.5819,  5.4929,  3.4338,  3.7257,  3.6850,  4.1368,\n",
      "         3.3323,  5.4970,  2.3296,  3.4161,  3.7584,  4.7580,  5.5924,  6.2425,\n",
      "         5.1507,  3.8915,  5.0668,  5.2681,  2.6415,  3.8961,  4.0124,  7.5380,\n",
      "         2.0666,  7.5158,  6.4531,  5.7383,  2.7262,  5.4827,  4.2748,  6.3123,\n",
      "         8.9993,  4.5000,  5.1508,  2.8861,  2.4167,  5.2583,  2.0637,  4.9157,\n",
      "         4.5950,  3.5503,  3.1181,  4.1467,  1.8951,  3.8583,  4.2508,  5.5946,\n",
      "         4.9656,  3.7666, 10.2940,  5.1179,  5.9684,  4.9050,  5.0933,  3.9781,\n",
      "         2.5031,  5.6324,  6.7845,  5.6606,  3.8371,  4.3541,  4.4920,  5.0161,\n",
      "         6.2517,  3.8049,  3.3709,  4.8286,  3.9389,  4.7338,  3.1300,  3.4353,\n",
      "         2.2986,  6.9530,  2.7131,  5.2337,  6.3455,  6.1937,  5.4280,  5.1737,\n",
      "         7.7482,  2.4939,  3.0993,  3.7962,  3.6020,  5.4513,  6.3918,  4.3502,\n",
      "         5.4392,  4.8995,  5.6542,  3.3092,  5.7388,  6.2896,  3.4684,  3.0457,\n",
      "         5.0037,  3.6516,  8.0547,  5.2411,  4.2549,  4.4462,  4.5073,  4.2705,\n",
      "         4.7108,  5.1867,  4.7107,  5.0010,  6.3455,  6.0467,  4.3395,  9.6477]),\n",
      "indices=tensor([6, 5, 8, 6, 3, 0, 3, 8, 0, 5, 4, 0, 1, 6, 2, 1, 1, 5, 3, 8, 9, 4, 5, 2,\n",
      "        3, 3, 5, 4, 6, 7, 1, 6, 7, 9, 3, 1, 5, 4, 2, 0, 1, 6, 7, 7, 8, 1, 3, 2,\n",
      "        0, 3, 7, 9, 4, 2, 9, 4, 8, 5, 5, 5, 0, 3, 2, 7, 6, 5, 0, 3, 2, 1, 4, 8,\n",
      "        8, 2, 6, 2, 9, 3, 5, 0, 3, 2, 2, 9, 8, 4, 1, 4, 9, 0, 3, 2, 6, 7, 2, 4,\n",
      "        0, 9, 3, 9, 4, 2, 2, 8, 0, 1, 2, 5, 6, 6, 9, 9, 8, 3, 2, 3, 1, 8, 1, 3,\n",
      "        8, 6, 8, 4, 6, 0, 8, 0]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 3.2673,  5.1375,  8.6212,  8.6649,  5.7850,  7.2155,  5.1935,  5.2531,\n",
      "         4.8534,  5.2994,  3.6970,  6.7661,  7.7862,  6.9972,  3.4174,  5.8677,\n",
      "         7.9458,  6.5296,  6.3229,  6.4571,  5.3086,  4.8724,  5.8670,  6.1722,\n",
      "         4.2988,  4.8876,  3.1079,  6.2745,  6.2224,  5.9569,  3.0311,  6.9895,\n",
      "         5.7284,  6.3040,  4.0258,  3.6227,  2.1541,  6.7812,  5.4965, 11.4375,\n",
      "         6.0572,  6.2245,  1.5965,  3.6547,  4.4886,  7.8856,  2.5123,  6.2287,\n",
      "         4.2861,  4.2062,  3.4485,  6.5172,  5.5610,  9.2712,  4.4289,  4.5373,\n",
      "         4.9493,  5.5885,  4.3656,  5.8086,  3.8161,  6.0704,  7.7412,  5.7105,\n",
      "         3.5125,  4.9555,  4.1130,  6.4725,  6.1693,  8.8712,  5.5210,  4.0054,\n",
      "         4.9089,  5.2059,  5.9616,  3.4748,  5.9687,  5.3010,  2.5866,  6.9263,\n",
      "         3.6240,  3.4966,  5.0551,  6.7472,  1.7571,  4.6042,  6.1999,  6.6062,\n",
      "         4.8525,  6.4578,  4.7277,  5.9861,  6.9409,  9.3314,  4.4440,  4.6297,\n",
      "         3.8707,  6.5417,  4.6156,  5.5557,  1.8106,  7.9026,  6.3907,  6.1422,\n",
      "         8.1087,  7.1585,  5.1160, 11.0886,  5.3294,  4.3155,  5.5212,  5.2843,\n",
      "         8.7140,  5.0101,  4.9686,  5.5131,  5.1543,  3.5620,  2.6451,  4.3092,\n",
      "         3.5080,  6.1232,  8.1868,  5.3812,  6.0020,  5.3860,  6.6793,  4.7258]),\n",
      "indices=tensor([8, 1, 0, 2, 0, 3, 4, 4, 6, 5, 8, 6, 7, 7, 3, 8, 0, 9, 6, 0, 7, 1, 4, 2,\n",
      "        4, 9, 1, 4, 1, 5, 9, 6, 1, 7, 9, 5, 8, 9, 6, 0, 0, 1, 5, 6, 7, 3, 3, 4,\n",
      "        5, 3, 3, 6, 0, 7, 3, 8, 2, 6, 4, 0, 4, 3, 0, 4, 1, 1, 1, 4, 6, 0, 4, 8,\n",
      "        2, 4, 7, 4, 1, 3, 3, 4, 2, 0, 1, 7, 5, 8, 1, 7, 3, 7, 5, 9, 3, 0, 5, 4,\n",
      "        8, 9, 8, 9, 1, 7, 2, 4, 2, 2, 1, 0, 3, 3, 6, 8, 0, 5, 4, 9, 1, 8, 5, 8,\n",
      "        7, 4, 0, 0, 3, 7, 7, 1]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 3.7924,  4.5636,  4.3506,  5.4437,  6.3188,  4.8640,  5.7437,  6.9238,\n",
      "         2.8636,  6.5425,  5.8430,  4.7710,  3.8405,  4.6131,  4.5863,  5.6690,\n",
      "         4.8579,  5.3967,  3.6699,  5.3428,  4.3652,  6.0986,  5.6929,  7.8375,\n",
      "         5.4749,  5.4231,  4.3214,  5.6398,  3.0194,  5.2321,  3.5353,  6.9742,\n",
      "         6.7100,  8.3879,  4.6391,  8.6784,  6.9525,  5.7021,  5.8126,  7.9160,\n",
      "         3.1172,  2.4947,  8.3618,  6.6836,  3.2156,  5.4292,  6.8348,  7.3615,\n",
      "         2.5102,  6.9357,  3.0378,  6.4447,  2.2092,  5.5587,  4.4047,  6.3586,\n",
      "         6.9729,  7.7624,  4.6198,  6.7092,  5.9177,  5.9332,  5.1351,  5.8357,\n",
      "         4.3646,  8.1435,  4.2198,  6.8978,  3.4698, 10.2959,  4.2471,  4.5891,\n",
      "         3.7271,  6.0990,  4.7836,  7.2242,  2.9414,  6.3895,  2.7814,  5.1866,\n",
      "         5.4820,  9.0154,  3.4210,  7.4653,  5.4899,  7.4710,  4.5014,  6.2342,\n",
      "         5.8883,  5.6041,  4.3757,  5.7839,  5.7848,  5.1304,  3.5468,  6.4301,\n",
      "         2.7796,  4.8616,  4.4983,  6.2129,  5.8518,  5.7173,  6.4900,  6.1603,\n",
      "         5.4020,  5.7191,  2.1410,  7.2753,  6.3962,  5.9732,  3.6872,  7.4519,\n",
      "         5.0552,  5.7157,  4.3485, 10.3231,  2.3491, 11.1977,  3.9168,  4.3927,\n",
      "         6.3146,  5.4825,  4.8961,  6.1121,  5.9040,  5.8762,  3.8765,  4.7429]),\n",
      "indices=tensor([2, 3, 7, 3, 2, 1, 0, 3, 8, 1, 6, 5, 8, 3, 7, 8, 6, 7, 8, 3, 5, 1, 0, 6,\n",
      "        9, 8, 2, 5, 9, 9, 5, 2, 0, 2, 0, 0, 3, 9, 6, 2, 3, 9, 7, 6, 3, 5, 3, 2,\n",
      "        3, 7, 8, 3, 2, 1, 8, 3, 7, 6, 9, 6, 7, 2, 9, 1, 1, 2, 9, 6, 9, 0, 5, 8,\n",
      "        1, 2, 1, 7, 6, 1, 7, 3, 3, 7, 5, 4, 8, 7, 5, 4, 3, 8, 6, 9, 6, 2, 0, 9,\n",
      "        1, 3, 9, 1, 1, 3, 9, 6, 9, 8, 7, 3, 4, 3, 8, 6, 9, 8, 8, 0, 8, 0, 3, 9,\n",
      "        0, 9, 6, 3, 5, 1, 9, 1]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 4.5521,  7.2891,  6.1861,  5.8839,  2.6794,  8.2476,  5.6242,  6.7526,\n",
      "         3.7435,  5.0905,  6.7797,  4.8022,  8.9924,  6.9293,  5.8675,  5.4578,\n",
      "         2.8529,  5.3392,  3.0923,  4.8686,  2.1387,  9.2126,  6.4263,  5.4426,\n",
      "         6.6746,  6.3739,  4.0531,  5.2589,  5.5200,  4.7094,  7.1660,  3.3599,\n",
      "         4.5848,  6.1373,  5.9426,  6.6159,  6.6424,  5.3761,  4.5983,  3.4449,\n",
      "         4.8343,  7.8436,  4.7144,  6.2663,  7.4140,  7.3766,  3.7264,  5.4963,\n",
      "         2.7916,  5.7878,  6.6309,  5.1615,  8.1101,  7.3915,  8.5061,  8.1224,\n",
      "         3.5322,  4.5495,  4.1771,  6.2439,  4.9714,  6.8904,  3.4723,  4.9105,\n",
      "         6.1293,  3.4890,  3.6794,  4.5619,  3.1209,  6.5920,  4.1019,  5.9550,\n",
      "         7.4249,  8.4697,  2.2839,  6.1096,  5.1057,  5.9409,  3.7330,  5.5506,\n",
      "         4.6664,  9.0879,  3.6896,  8.5180,  5.5998,  6.3066,  4.0966,  7.3216,\n",
      "         8.3413,  6.6809,  6.7634,  7.4945,  6.9551,  3.3022,  2.9559,  5.4104,\n",
      "         5.2344,  4.6509,  4.9112,  5.4036,  4.5003,  5.3855,  4.3126,  2.5957,\n",
      "         4.3020,  5.9108,  4.2628, 10.6796,  4.3431,  7.0831,  2.9488,  5.7882,\n",
      "         4.8396,  6.1562,  4.4501,  1.7707,  6.9871,  5.9780,  5.9794,  4.2672,\n",
      "         6.1732,  7.0807,  6.4791,  9.4212,  5.5847,  7.7171,  5.8734,  6.9692]),\n",
      "indices=tensor([0, 0, 6, 1, 2, 2, 1, 3, 3, 4, 6, 5, 0, 6, 3, 7, 5, 8, 8, 9, 1, 0, 6, 1,\n",
      "        7, 2, 4, 3, 8, 4, 7, 5, 5, 6, 0, 7, 7, 8, 6, 9, 3, 0, 4, 1, 6, 2, 5, 3,\n",
      "        8, 4, 3, 5, 3, 6, 6, 7, 1, 8, 9, 9, 4, 7, 5, 5, 4, 5, 8, 1, 1, 9, 7, 9,\n",
      "        2, 7, 2, 1, 8, 0, 4, 9, 9, 0, 0, 7, 1, 1, 3, 7, 7, 3, 9, 6, 3, 9, 4, 0,\n",
      "        3, 8, 3, 3, 1, 2, 4, 5, 8, 9, 2, 0, 1, 6, 4, 1, 1, 7, 3, 8, 3, 8, 8, 3,\n",
      "        0, 4, 3, 7, 7, 6, 7, 3]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 4.8945,  7.7125,  1.7082,  5.6436,  3.9462,  5.6676,  4.7052,  4.6786,\n",
      "         2.1506,  4.3196,  5.1514,  5.1993,  3.2924,  6.2100,  5.6148,  5.4687,\n",
      "         5.0301,  6.4179,  5.3007,  5.5706,  1.9887,  3.3260,  4.2032,  6.5989,\n",
      "         6.6808,  7.1720,  1.5632,  4.4376,  9.5386,  7.7232,  6.8476,  6.3055,\n",
      "         8.0461,  4.6116,  5.5015,  7.0215,  5.4945,  6.1552,  4.9122,  5.9056,\n",
      "         2.2348,  3.7440,  2.0457,  2.9188,  7.7960,  2.4822,  4.7009,  7.5172,\n",
      "         6.4415,  5.5735,  4.9536,  5.2973,  2.8689,  6.9489,  3.0925,  5.8418,\n",
      "         5.3256,  5.6498,  5.5102,  5.1339,  5.4442,  4.9158,  1.9523,  7.7685,\n",
      "         6.2241,  3.3368,  5.7641,  5.9988, 10.3689,  4.5628,  4.8886,  6.5741,\n",
      "         7.0221,  5.9080,  4.1792,  4.1270,  6.2386,  6.5765,  1.5918,  6.9486,\n",
      "         5.7362,  8.2370,  7.9886,  4.0613,  7.2993,  5.1096,  8.4909,  5.9532,\n",
      "         6.4179,  5.8650,  3.6609,  4.2407,  4.0902,  5.1490,  7.0040,  8.2338,\n",
      "         6.1501,  7.6283,  2.5446,  7.6350,  1.2906,  7.9094,  3.9503,  4.1965,\n",
      "         5.8841,  7.4466,  5.5265,  6.1840,  6.2918,  6.4247,  5.3226,  8.1438,\n",
      "         3.4214,  5.8035,  3.1245,  5.7847,  3.8323,  9.5367,  6.5280,  5.0165,\n",
      "         2.2171,  6.3815,  3.4130,  3.9487,  4.9920,  3.8974,  3.3999,  3.7371]),\n",
      "indices=tensor([3, 2, 9, 3, 7, 8, 4, 9, 5, 4, 3, 8, 4, 8, 5, 7, 1, 1, 2, 0, 2, 8, 2, 7,\n",
      "        7, 7, 7, 9, 0, 2, 9, 3, 2, 4, 4, 6, 3, 1, 5, 1, 5, 9, 4, 5, 3, 5, 2, 0,\n",
      "        1, 4, 1, 8, 6, 7, 2, 4, 7, 9, 1, 2, 2, 3, 3, 6, 0, 9, 6, 1, 0, 2, 2, 4,\n",
      "        0, 1, 0, 5, 0, 4, 0, 2, 1, 0, 7, 9, 6, 8, 0, 6, 1, 1, 4, 9, 5, 3, 6, 2,\n",
      "        0, 0, 2, 0, 8, 2, 2, 5, 2, 6, 8, 9, 0, 3, 8, 6, 2, 3, 4, 6, 4, 0, 2, 1,\n",
      "        3, 2, 5, 3, 9, 4, 5, 7]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 5.1423,  5.1444,  4.4544,  3.8782,  5.5260,  4.4474,  2.0418,  2.9750,\n",
      "         5.5569,  5.9314,  2.1337,  5.1672,  3.7051,  2.3695,  2.5961,  1.7308,\n",
      "         3.9530,  4.7203,  4.9305,  2.3721,  6.1857,  3.1416,  5.4138,  5.0733,\n",
      "         3.6980,  3.5848,  5.7558,  4.8012,  4.2961,  4.1960,  4.5497,  5.3768,\n",
      "         2.3586,  3.7305,  3.4259,  3.8011,  5.6644,  3.0856,  3.3223,  3.8362,\n",
      "         2.6517,  5.2453,  5.3147,  6.5910,  2.5009,  2.2001,  3.5638,  2.4569,\n",
      "         4.8910,  1.5559,  3.6846,  3.8559,  5.7357,  2.3545,  5.1976,  3.8166,\n",
      "         4.5925,  5.3350,  7.3042,  4.3622,  6.8242,  6.2416,  1.8801, 11.8390,\n",
      "         2.8155,  6.0938,  4.8853,  2.2988,  2.3602,  3.0203,  3.8213,  2.5279,\n",
      "         2.4671,  3.2180,  2.8584,  8.1189,  5.5292,  9.4376,  6.6305,  3.7128,\n",
      "         6.2491,  5.3235,  2.6759,  2.6012,  4.9779,  2.4981,  2.2405,  2.0043,\n",
      "         6.6415,  5.8194,  4.1484,  5.4310,  5.0878,  4.6184,  3.0666,  5.7484,\n",
      "         2.2168,  5.4157,  4.5951,  5.1167,  7.2554,  5.6787,  4.2692,  6.2658,\n",
      "         5.7941,  6.3766,  3.2639,  4.3347,  5.0534,  2.7725,  5.5990,  2.0708,\n",
      "         4.7356,  2.7553,  4.8187,  4.5480, 10.8781,  3.0360,  6.2268,  3.5381,\n",
      "         4.9622,  7.2457,  3.0635,  4.8480,  1.7213,  5.1043,  4.0087,  4.5190]),\n",
      "indices=tensor([1, 0, 2, 3, 5, 4, 8, 7, 1, 0, 9, 1, 1, 2, 9, 2, 6, 4, 7, 1, 8, 6, 1, 7,\n",
      "        3, 8, 7, 7, 0, 2, 2, 4, 0, 1, 3, 4, 0, 1, 5, 4, 6, 9, 4, 6, 2, 8, 5, 4,\n",
      "        7, 1, 3, 3, 9, 7, 4, 2, 8, 4, 0, 6, 2, 7, 8, 0, 7, 6, 3, 2, 6, 6, 3, 2,\n",
      "        4, 7, 5, 0, 7, 0, 0, 0, 4, 6, 1, 1, 6, 1, 8, 2, 3, 3, 2, 9, 2, 7, 8, 6,\n",
      "        6, 9, 9, 1, 7, 9, 7, 0, 1, 6, 5, 7, 3, 4, 1, 1, 3, 8, 2, 1, 0, 4, 0, 3,\n",
      "        9, 0, 3, 2, 5, 9, 8, 4]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 2.7348,  3.4100,  4.4951,  5.7271,  2.6670,  9.4958,  4.8458, 10.3559,\n",
      "         4.8168,  2.2873,  3.4012,  6.5677,  6.1904,  4.5163,  6.4303,  4.9417,\n",
      "         6.0822,  4.8463,  5.5003,  1.2196,  6.1430,  5.3273,  5.6385,  2.7605,\n",
      "         6.2620,  4.3351,  3.4301,  3.4281,  5.7589,  5.2554,  1.9470,  7.9337,\n",
      "         4.7930,  3.8802,  3.7552,  8.9618,  2.7548,  7.2942,  9.3002,  5.3885,\n",
      "         6.5972,  6.7226,  6.1934,  4.4981,  6.4402,  5.1310,  8.0191,  8.7022,\n",
      "         4.3434,  6.8615,  4.0285,  5.1245,  5.6935,  8.1278,  6.6302,  5.9248,\n",
      "        11.7879,  7.3941,  5.2573,  4.5290,  2.7032,  4.9766,  2.7678,  2.2053,\n",
      "         8.1834,  8.7862,  3.7488,  7.3675,  2.8526,  5.2799,  6.5823,  4.6968,\n",
      "         2.0830,  8.7952,  2.8797,  5.5760,  3.8453,  8.0188,  4.3873,  6.8994,\n",
      "         5.1188,  3.7109,  4.8595,  2.3459,  4.0004,  9.1539,  3.6300,  7.1251,\n",
      "         5.8413,  5.9664,  1.9373,  5.3581,  7.4756,  5.6281,  5.5829,  4.5322,\n",
      "         4.6521,  5.5877,  2.0240,  5.2391,  3.1781,  5.5722,  6.9470,  8.2103,\n",
      "         7.8690,  5.7308,  6.7344,  4.3281,  5.3616,  6.3234,  3.9718,  2.4692,\n",
      "         4.8882, 10.0633,  5.8463,  5.1595,  3.2153,  4.8395, 10.3807,  5.3593,\n",
      "         4.6208,  7.3376,  4.9644,  9.9788,  2.8291,  8.0415,  3.7025,  7.4972]),\n",
      "indices=tensor([6, 9, 6, 7, 8, 0, 4, 0, 1, 4, 8, 7, 4, 4, 0, 9, 3, 9, 5, 5, 6, 9, 1, 1,\n",
      "        6, 3, 6, 6, 8, 7, 8, 0, 4, 4, 8, 0, 3, 0, 0, 1, 2, 2, 7, 3, 1, 4, 3, 6,\n",
      "        2, 7, 6, 8, 1, 0, 1, 1, 0, 2, 3, 3, 7, 4, 3, 5, 0, 6, 5, 7, 3, 8, 3, 9,\n",
      "        4, 0, 6, 1, 9, 2, 2, 3, 9, 4, 4, 5, 5, 6, 7, 7, 1, 8, 1, 1, 7, 4, 7, 4,\n",
      "        7, 2, 7, 3, 4, 3, 7, 0, 6, 9, 4, 5, 2, 4, 4, 2, 3, 0, 3, 8, 5, 4, 0, 6,\n",
      "        6, 7, 9, 0, 0, 7, 8, 7]))\n",
      "torch.return_types.max(\n",
      "values=tensor([5.3300, 4.0086, 4.9429, 6.8590, 4.3515, 5.1762, 2.7992, 5.2652, 4.4957,\n",
      "        5.5624, 9.7050, 6.2316, 4.4734, 5.2371, 5.9285, 8.4658, 4.4537, 6.1266,\n",
      "        5.0000, 7.3914, 5.5908, 4.6729, 5.5069, 8.0122, 5.5375, 4.2646, 3.9218,\n",
      "        8.2152, 3.1031, 6.3484, 4.6345, 4.6762, 7.0318, 3.6310, 6.8680, 4.6207,\n",
      "        4.8673, 8.4348, 6.8989, 6.0571, 6.0413, 4.3963, 4.6354, 5.4050, 5.1527,\n",
      "        3.7487, 4.3375, 8.6062, 3.3680, 5.6581, 3.3791, 8.3223, 3.8429, 5.6705,\n",
      "        4.3013, 6.1099, 6.5900, 7.9798, 6.0039, 3.9695, 5.9657, 5.4900, 4.7569,\n",
      "        7.2839, 3.0853, 8.9178, 5.2580, 5.7610, 3.4559, 8.1062, 2.6959, 5.1182,\n",
      "        4.4952, 6.1371, 3.6805, 8.1171, 3.7146, 6.1487, 6.2541, 5.9776, 5.4057,\n",
      "        6.0761, 5.0647, 6.0944, 5.4106, 7.4619, 3.9686, 5.5310, 1.2417, 6.5106,\n",
      "        4.2525, 5.0060, 3.7006, 9.4795, 5.5334, 5.2373, 5.7762, 7.3516, 4.3193,\n",
      "        8.4159, 7.4614, 4.8212, 4.1343, 5.3806, 3.8844, 3.6274, 4.5665, 9.1550,\n",
      "        5.3171, 5.8967, 2.5929, 6.6244, 5.8026, 3.5998, 4.3192, 6.2885, 4.9389,\n",
      "        4.7486, 2.5009, 5.4709, 3.1694, 3.5797, 7.5996, 5.3425, 3.7851, 7.3331,\n",
      "        8.3965, 6.5249]),\n",
      "indices=tensor([9, 1, 8, 6, 4, 9, 9, 1, 0, 2, 0, 9, 8, 3, 6, 6, 4, 2, 6, 3, 1, 4, 1, 6,\n",
      "        3, 8, 8, 7, 5, 2, 1, 3, 0, 9, 6, 1, 8, 2, 2, 9, 4, 5, 6, 2, 5, 2, 6, 7,\n",
      "        6, 1, 8, 7, 2, 1, 7, 1, 2, 0, 4, 3, 7, 4, 8, 2, 8, 6, 2, 4, 6, 7, 2, 4,\n",
      "        8, 2, 2, 7, 6, 4, 3, 2, 9, 9, 2, 2, 5, 7, 6, 9, 5, 2, 7, 8, 5, 6, 1, 1,\n",
      "        7, 0, 5, 6, 2, 8, 1, 5, 9, 5, 6, 0, 2, 5, 6, 3, 1, 3, 8, 9, 1, 7, 7, 4,\n",
      "        4, 3, 0, 9, 7, 6, 0, 7]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 3.9004,  3.9583,  3.7813,  9.9354,  7.8462,  9.5780, 11.7571,  8.1866,\n",
      "         4.8667,  7.0797,  4.6636,  6.3840,  1.2877,  2.8389,  6.0534,  4.1142,\n",
      "         2.1424,  5.6609,  6.1366,  4.4752,  2.5507,  4.8740,  3.7022,  5.1005,\n",
      "         5.4029,  9.0393,  2.8125,  9.5734,  6.4074,  7.0485,  3.3485,  5.0271,\n",
      "         5.7961,  3.9373,  3.4255,  4.6223,  5.1646,  4.4888,  2.8464,  4.7464,\n",
      "         4.6687,  7.5830,  6.6761,  3.9762,  5.1456,  3.6543,  4.0095,  6.2140,\n",
      "         1.6140,  4.7018,  4.4481,  5.5919,  8.4491,  5.0866,  4.9236,  6.8855,\n",
      "         4.1855,  5.7477,  5.5686,  8.0610,  2.5450,  6.8409,  1.9232,  3.7512,\n",
      "         4.3010,  6.9517,  3.8883,  7.2145,  6.2216,  4.7947,  4.0584,  3.8598,\n",
      "         2.3485,  4.8440,  4.3362,  5.0099,  4.3813,  4.7485,  5.8100,  6.4788,\n",
      "         4.5875,  6.0709,  3.3175,  4.0038,  4.6286,  5.4028,  4.8204,  4.5103,\n",
      "         4.2947,  5.7614,  4.7478,  5.0015,  4.6906,  5.5245,  4.3944,  4.6533,\n",
      "         7.8306,  9.4478,  6.8943,  6.2014,  4.4548,  5.1160,  3.3693,  5.4836,\n",
      "         2.0538,  3.9256,  9.8109,  8.7146,  4.6567,  5.8538,  5.5216,  4.7565,\n",
      "         6.2404,  6.6418,  7.7145,  6.9401,  3.4481,  7.0238,  5.2860,  7.5960,\n",
      "         3.7793,  6.8611,  4.7629,  5.3892,  4.9420,  6.3879,  4.3872,  6.2570]),\n",
      "indices=tensor([5, 3, 8, 0, 6, 0, 0, 6, 8, 3, 4, 0, 5, 5, 1, 2, 8, 9, 7, 1, 3, 2, 7, 1,\n",
      "        8, 6, 6, 0, 7, 0, 2, 1, 4, 2, 4, 3, 8, 4, 1, 5, 0, 6, 0, 7, 3, 8, 9, 9,\n",
      "        8, 0, 5, 1, 2, 3, 0, 4, 1, 5, 1, 6, 2, 7, 3, 7, 2, 9, 6, 0, 2, 1, 4, 2,\n",
      "        4, 3, 3, 4, 1, 5, 2, 6, 4, 7, 5, 8, 4, 9, 3, 1, 3, 4, 1, 4, 1, 3, 5, 3,\n",
      "        7, 0, 7, 9, 0, 5, 6, 4, 2, 8, 0, 0, 5, 8, 1, 4, 2, 0, 6, 7, 9, 7, 0, 6,\n",
      "        1, 9, 9, 1, 6, 2, 7, 9]))\n",
      "torch.return_types.max(\n",
      "values=tensor([5.5588, 4.0302, 5.7642, 7.1004, 4.7859, 6.6270, 4.8444, 5.3855, 3.3283,\n",
      "        5.6560, 3.8900, 8.6472, 2.4595, 3.9396, 7.8456, 5.5594, 4.4782, 4.2303,\n",
      "        3.5777, 2.7407, 4.1305, 4.1740, 6.5360, 6.0566, 5.3155, 5.3072, 8.7769,\n",
      "        4.0302, 4.4205, 6.2862, 4.2241, 5.6346, 7.1992, 7.7193, 6.6380, 5.3625,\n",
      "        5.5888, 7.5430, 3.0617, 5.4193, 2.3595, 3.9824, 2.6005, 3.6711, 4.0117,\n",
      "        6.4565, 6.4112, 4.5388, 4.0012, 3.5165, 4.6304, 5.1739, 2.4646, 3.8256,\n",
      "        5.1582, 3.6759, 4.3600, 3.6810, 5.9902, 5.1579, 4.7984, 7.8200, 1.5636,\n",
      "        7.4113, 3.3781, 5.4799, 2.9637, 4.5846, 7.4342, 5.6870, 7.3662, 5.5655,\n",
      "        3.2262, 5.3476, 2.1298, 3.2883, 3.2102, 5.1128, 2.8928, 4.1447, 2.5928,\n",
      "        9.9265, 3.1344, 4.8083, 3.3019, 3.1275, 3.3795, 4.7929, 5.1128, 6.3183,\n",
      "        5.8874, 5.5984, 3.3321, 5.5655, 5.5799, 4.1846, 4.6711, 5.9170, 6.6933,\n",
      "        3.2255, 5.9740, 5.8740, 4.9253, 9.3970, 2.3994, 4.7944, 5.6293, 5.4354,\n",
      "        7.2587, 3.9579, 3.4205, 8.1934, 2.8452, 1.7686, 1.5859, 5.0240, 4.2482,\n",
      "        5.3784, 6.2097, 6.1485, 2.6024, 5.3489, 5.9562, 5.3925, 3.8127, 8.9386,\n",
      "        5.3886, 4.9809]),\n",
      "indices=tensor([5, 3, 3, 6, 1, 2, 6, 3, 7, 4, 1, 6, 5, 5, 6, 2, 8, 8, 5, 1, 5, 1, 0, 2,\n",
      "        0, 9, 0, 5, 2, 8, 9, 8, 0, 7, 0, 1, 1, 7, 5, 1, 9, 1, 9, 3, 6, 4, 7, 4,\n",
      "        4, 7, 7, 4, 8, 2, 8, 7, 5, 2, 5, 9, 8, 2, 8, 7, 3, 9, 5, 2, 7, 8, 7, 6,\n",
      "        7, 1, 9, 8, 7, 5, 9, 5, 6, 0, 4, 5, 5, 3, 8, 5, 9, 9, 7, 7, 9, 4, 3, 8,\n",
      "        3, 9, 3, 6, 7, 9, 1, 0, 9, 0, 3, 6, 0, 8, 7, 0, 1, 5, 4, 8, 7, 9, 7, 1,\n",
      "        2, 8, 5, 1, 1, 0, 1, 0]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 5.0787,  5.0157,  3.1984, 10.1582,  5.1405,  5.6528,  2.3999,  6.6398,\n",
      "         5.4438,  6.1344,  4.4436,  8.3792,  4.0455,  9.8072,  5.3303,  4.3014,\n",
      "         3.4280, 10.9225,  4.4464,  5.7785,  6.5769,  5.9446,  3.3035,  5.9539,\n",
      "         5.8421,  5.8114,  3.2736,  4.5537,  3.5960,  8.9021,  5.6853,  8.4226,\n",
      "         4.4956,  4.8251,  2.4653,  4.6695,  3.3146,  6.4656,  5.5607,  5.7317,\n",
      "         4.5309,  3.5218,  4.9804,  4.9442,  4.1446,  6.6730,  4.5006,  7.9708,\n",
      "         4.7977,  7.9520,  4.3496,  4.7961,  4.6267,  4.9199,  5.0972,  7.7936,\n",
      "         5.4179,  7.5274,  4.4695,  5.4574,  4.7899,  6.2665,  5.9884,  6.2680,\n",
      "         7.6713,  6.0204,  4.9270,  5.7099,  4.4146,  3.9566,  5.3146,  7.7946,\n",
      "        10.2803,  7.6944,  3.7476,  4.5579,  2.8047,  5.3748,  6.3614,  6.2967,\n",
      "         5.2012,  5.9025,  2.3231,  5.6999,  5.0157,  8.6572,  6.8370,  2.1205,\n",
      "         3.2286, 11.0233,  5.7260,  5.3237,  6.2663,  6.6420,  2.7679,  6.4859,\n",
      "         4.9547,  5.3224,  3.9151,  7.9506,  1.6315,  6.1400,  3.1349,  7.4135,\n",
      "         5.8970,  5.6318,  3.1021,  6.3726,  4.5983,  7.1017,  3.1561,  6.8826,\n",
      "         4.7180, 12.0053,  3.5654,  6.5550,  3.4852,  6.3581,  5.8717,  4.4622,\n",
      "         8.9144,  8.5095,  1.8815,  6.9236,  3.4043,  7.2009,  3.2413, 10.6784]),\n",
      "indices=tensor([2, 1, 5, 2, 2, 3, 9, 4, 6, 0, 7, 6, 4, 7, 7, 5, 6, 0, 4, 1, 1, 2, 2, 3,\n",
      "        2, 4, 8, 0, 4, 6, 8, 7, 6, 8, 4, 9, 1, 0, 2, 1, 7, 2, 4, 3, 3, 4, 3, 6,\n",
      "        4, 7, 3, 8, 0, 8, 6, 2, 7, 6, 7, 9, 4, 6, 3, 1, 9, 9, 9, 9, 5, 9, 1, 4,\n",
      "        0, 4, 1, 3, 3, 8, 0, 1, 6, 4, 8, 1, 0, 2, 6, 8, 3, 0, 1, 9, 1, 4, 9, 9,\n",
      "        9, 1, 5, 7, 1, 4, 1, 4, 7, 1, 8, 8, 3, 7, 8, 6, 6, 0, 8, 8, 8, 1, 0, 8,\n",
      "        0, 2, 2, 6, 8, 2, 4, 0]))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.return_types.max(\n",
      "values=tensor([ 4.2135,  5.8972,  6.1922,  5.7943,  2.7549,  9.8042,  3.7572,  2.1646,\n",
      "         5.4056,  7.0247,  3.0221,  2.3675,  6.0389,  9.7093,  6.7784,  8.9765,\n",
      "         2.8881,  6.5403,  3.4293,  8.6310,  4.8034,  9.2701,  7.1001, 10.3800,\n",
      "         8.9304,  7.7203,  4.9936,  6.0618,  4.8188,  2.9324,  6.6970, 10.1980,\n",
      "         6.9325,  7.0803,  7.9810,  3.8853,  7.2532,  5.8902,  5.0705,  5.5742,\n",
      "         4.1145,  6.4835,  4.6632,  6.5525,  3.9043,  5.7234,  4.8860, 11.9500,\n",
      "         5.8474, 11.2446,  6.1263,  3.2292,  5.5758,  3.9325,  5.5372,  5.7837,\n",
      "         3.9322,  7.3475,  2.8632,  6.1298,  8.9789,  9.4539,  3.4636,  5.9024,\n",
      "         4.0034,  5.9190,  4.1412,  9.0603,  6.7428,  5.5986,  2.5777,  8.6483,\n",
      "         7.5782,  6.4904,  5.1454,  4.2812,  2.5612,  9.2966,  5.8010,  7.0534,\n",
      "         2.8111,  9.8421,  5.0508,  4.2183,  5.4661,  4.5345,  3.0456,  5.8631,\n",
      "         4.7906,  6.3197,  5.0293,  6.9613,  4.9165,  8.7171,  5.9471,  6.1579,\n",
      "         3.9048,  4.7230,  5.1371,  8.3737,  5.8006,  6.2222,  5.9650,  8.3317,\n",
      "         4.8575,  4.7764,  3.3969,  6.0899,  6.6851,  6.2103,  6.6260,  3.4736,\n",
      "         5.8827, 11.0170,  7.2032,  6.3789,  1.6170,  6.3336,  7.9844,  7.3974,\n",
      "         5.3443,  7.5980,  5.5277,  6.0125,  6.8425,  8.0061,  2.4430,  6.7213]),\n",
      "indices=tensor([8, 9, 1, 1, 9, 2, 6, 8, 3, 4, 4, 8, 1, 6, 0, 7, 2, 3, 1, 0, 9, 2, 4, 2,\n",
      "        0, 2, 4, 7, 6, 5, 2, 0, 0, 3, 0, 3, 7, 2, 6, 1, 3, 4, 8, 4, 4, 3, 2, 0,\n",
      "        0, 0, 0, 8, 4, 5, 1, 4, 3, 7, 4, 9, 2, 7, 3, 8, 8, 8, 3, 7, 7, 9, 9, 6,\n",
      "        2, 3, 8, 1, 5, 7, 1, 9, 5, 6, 1, 8, 1, 3, 5, 1, 6, 0, 5, 2, 7, 6, 3, 0,\n",
      "        5, 0, 4, 6, 3, 8, 5, 7, 4, 3, 2, 2, 1, 8, 6, 8, 7, 0, 3, 1, 9, 2, 7, 3,\n",
      "        0, 4, 6, 5, 7, 6, 1, 7]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 3.3342,  5.8843,  4.1567,  4.9336,  3.4390, 10.5510,  5.7021,  6.4734,\n",
      "         6.1893,  7.7859,  6.9924,  7.3241,  2.8030,  7.6699,  2.9346,  4.5789,\n",
      "         5.0800,  8.2555,  6.6548,  7.2832,  3.1084,  4.8109,  4.9765,  5.4540,\n",
      "         4.4325, 10.1987,  3.7004,  6.8067,  4.3595,  7.2839,  4.2829,  7.9135,\n",
      "         4.2680,  6.8436,  4.5164,  2.2221,  3.5725,  8.6257,  5.8848,  8.0903,\n",
      "         3.2444,  6.3930,  5.4718,  5.2227,  1.8787, 11.5271, 10.2774,  4.4659,\n",
      "         6.5652,  7.4221,  3.9811,  5.3974,  5.1953,  4.9426,  3.1673,  6.1987,\n",
      "         4.3159, 10.6567,  4.8324,  6.6049,  3.3125,  5.1097,  8.2860,  5.0029,\n",
      "         7.3851,  6.4490,  4.1913,  7.6541,  2.7331,  7.3410,  3.4641,  5.8278,\n",
      "         6.1308,  3.3609,  2.5996,  6.1387,  2.6698, 10.4677,  3.1446,  3.9378,\n",
      "         7.2871,  8.0777,  4.3224,  6.3711,  2.5845,  4.5520,  5.9050,  5.6626,\n",
      "         4.1648,  5.0711,  2.1550,  5.4450,  4.7950,  5.5234,  5.7950,  6.1894,\n",
      "         3.5488,  8.7201,  3.8611,  5.7571,  5.9445,  7.1654,  2.1121,  6.0852,\n",
      "         3.8645,  5.5486,  6.1109,  7.9522,  5.1721,  5.6429,  2.8516,  5.5786,\n",
      "         3.0916,  9.6242,  4.6665,  6.7736,  3.6259,  6.8568,  3.1311,  9.0430,\n",
      "         4.9249,  5.4342,  7.7498,  4.8428,  3.3424,  7.6847,  3.8050,  5.9315]),\n",
      "indices=tensor([6, 8, 2, 9, 8, 0, 8, 1, 1, 2, 6, 3, 8, 4, 2, 0, 4, 6, 9, 7, 9, 8, 2, 9,\n",
      "        1, 0, 1, 1, 4, 2, 2, 3, 3, 4, 5, 5, 3, 6, 6, 7, 5, 8, 9, 9, 0, 0, 0, 9,\n",
      "        2, 7, 4, 8, 4, 9, 4, 9, 2, 0, 5, 1, 6, 4, 0, 5, 6, 1, 7, 6, 9, 7, 0, 3,\n",
      "        1, 2, 7, 9, 2, 0, 5, 5, 0, 6, 7, 7, 3, 3, 1, 9, 7, 9, 9, 3, 8, 8, 7, 1,\n",
      "        9, 2, 3, 9, 4, 6, 4, 7, 3, 5, 3, 6, 8, 3, 2, 5, 4, 0, 3, 5, 3, 4, 0, 0,\n",
      "        8, 3, 7, 4, 9, 7, 6, 7]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 4.9368,  4.0604,  3.6020,  3.8253,  7.0456,  3.6197,  4.7049,  5.7583,\n",
      "         2.8138,  6.4931,  4.3598,  6.1751,  4.7486,  5.8688,  2.6269,  5.8855,\n",
      "         6.4726,  5.2920,  1.8633,  9.8019,  2.7914,  4.1653,  5.4369,  8.8429,\n",
      "         5.5301,  6.9836,  1.4849,  6.8663,  4.2329,  8.8034,  3.2143,  7.1256,\n",
      "         5.6357,  5.4173,  7.0590,  6.3766,  4.9208,  5.4394,  3.6523,  4.8996,\n",
      "         3.8318,  5.0700,  5.6915,  5.7669,  5.8711,  6.8090,  4.0094,  5.6563,\n",
      "         4.3681,  7.4321,  6.8697,  5.6779,  3.5336,  4.4960,  4.9662,  7.1902,\n",
      "         3.4267,  7.3370,  3.8957,  4.2164,  4.7770,  4.7510,  3.9319,  7.8859,\n",
      "         4.5950,  5.2768,  4.1695,  5.8442,  5.1321,  5.2827,  1.8216,  5.5998,\n",
      "         3.6520,  6.4286,  5.2092,  6.6572,  3.2636,  5.9143,  4.6701,  9.1253,\n",
      "         3.0021,  8.0866,  5.6862,  5.9684,  5.2687,  5.0693,  3.2684,  7.2746,\n",
      "         4.3568,  7.1898,  3.6393,  6.1298,  3.0819,  4.6466,  5.8491,  6.2279,\n",
      "         8.4080,  7.5781,  8.8572,  6.0144,  5.6980,  4.4152,  4.6987, 10.2697,\n",
      "         4.1600,  7.6400,  4.0591,  5.6022,  6.5314,  8.2733,  3.6275,  7.2141,\n",
      "         4.7936,  3.9959,  4.4533,  4.7081,  3.1920,  9.3699,  1.5701,  5.3985,\n",
      "         5.1344,  8.8212,  6.1525,  5.3629,  7.8925,  3.7939,  2.7554,  9.3685]),\n",
      "indices=tensor([1, 9, 0, 4, 0, 3, 3, 7, 2, 6, 4, 2, 6, 1, 5, 5, 6, 5, 0, 0, 5, 5, 5, 0,\n",
      "        2, 6, 5, 7, 7, 0, 9, 2, 1, 9, 0, 3, 4, 4, 3, 4, 7, 8, 4, 1, 3, 2, 7, 2,\n",
      "        6, 3, 9, 1, 8, 3, 6, 6, 4, 7, 8, 2, 4, 9, 2, 6, 2, 5, 4, 1, 6, 9, 5, 8,\n",
      "        3, 1, 3, 1, 4, 5, 3, 0, 8, 2, 4, 7, 2, 8, 3, 6, 4, 6, 4, 8, 3, 4, 2, 4,\n",
      "        6, 2, 0, 2, 1, 8, 4, 0, 9, 0, 6, 1, 2, 2, 5, 3, 1, 5, 5, 9, 8, 0, 1, 1,\n",
      "        3, 2, 1, 4, 3, 0, 6, 6]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 4.8534,  5.0725,  3.6849,  4.9371,  2.5040,  3.9145,  3.9373,  8.2304,\n",
      "         2.5546,  5.9097,  3.9093,  9.1688,  4.9017,  7.1369,  5.8588,  5.9320,\n",
      "         3.7713,  4.1493,  4.9741,  6.9664,  5.2717,  7.7218,  3.9860,  4.6469,\n",
      "         3.0282,  3.5815,  5.4361,  5.9630,  5.0126,  6.5418,  4.1170,  6.1812,\n",
      "         4.3251,  6.5613,  3.0917,  5.3027,  5.0232,  6.4649,  2.1018,  8.1286,\n",
      "         4.0467,  5.3631,  5.5755,  4.2768,  4.7913,  4.1478,  3.8000,  4.8958,\n",
      "         4.5855,  7.4611,  4.3435,  6.4719,  5.3565, 10.5242,  2.8812,  3.7032,\n",
      "         3.8153,  5.5017,  6.6928,  5.6108,  3.4533,  6.9017,  3.2378,  6.0823,\n",
      "         6.1312,  2.6138,  2.8223,  8.7369,  5.8019,  5.8357,  2.2380,  5.0002,\n",
      "         3.5588,  4.8425,  2.8660,  5.6152,  3.3964,  6.5610,  4.4631,  4.8971,\n",
      "         3.7391,  3.8410,  3.3345,  5.2922,  7.1539, 10.6809,  5.4940,  7.4035,\n",
      "         7.6224,  7.1677,  3.0948,  4.3202,  3.3724,  7.6797,  5.0652,  7.6871,\n",
      "         8.0915,  4.8938,  5.3420,  5.5508,  4.3699,  4.1063,  3.1434,  6.9243,\n",
      "         5.8770,  7.8333,  4.1732,  4.1165,  5.8683,  9.1118,  3.8304,  1.6594,\n",
      "         3.4331,  8.2852,  4.0281,  7.6427,  3.9225,  4.2228,  3.7616,  4.9244,\n",
      "         5.4663, 10.7440,  3.8572,  6.9887,  5.5128,  4.7545,  3.7289,  5.4730]),\n",
      "indices=tensor([1, 7, 9, 8, 1, 9, 6, 0, 5, 1, 8, 2, 7, 3, 7, 4, 5, 5, 7, 6, 5, 7, 5, 8,\n",
      "        2, 9, 7, 3, 6, 5, 1, 3, 1, 2, 0, 9, 7, 3, 9, 2, 8, 1, 7, 4, 4, 5, 9, 5,\n",
      "        7, 2, 1, 3, 8, 2, 8, 1, 4, 3, 7, 9, 1, 7, 9, 2, 4, 1, 1, 2, 4, 8, 7, 9,\n",
      "        2, 1, 7, 8, 9, 8, 4, 7, 7, 8, 6, 1, 2, 0, 9, 0, 2, 6, 4, 9, 5, 7, 1, 7,\n",
      "        7, 5, 1, 6, 5, 1, 7, 5, 2, 7, 4, 1, 0, 2, 8, 8, 5, 0, 0, 7, 7, 9, 1, 9,\n",
      "        3, 0, 1, 3, 0, 8, 4, 4]))\n",
      "torch.return_types.max(\n",
      "values=tensor([6.0636, 3.5149, 2.9115, 6.6536, 8.2412, 5.1162, 4.4625, 4.9132, 2.5900,\n",
      "        7.1392, 4.3325, 1.8423, 4.5949, 5.4245, 7.3054, 8.7665, 5.5506, 7.4980,\n",
      "        2.2676, 8.1349, 5.0456, 7.0220, 5.2919, 9.1121, 3.0283, 4.4201, 4.4219,\n",
      "        7.6836, 2.7761, 4.8151, 7.0224, 5.1994, 8.4071, 5.9209, 5.9158, 5.6534,\n",
      "        2.5665, 8.6322, 4.9388, 3.4735, 4.8927, 4.6488, 3.1747, 5.2201, 2.6068,\n",
      "        4.0424, 2.9839, 4.1820, 5.1190, 3.8423, 2.4166, 7.9977, 4.8557, 7.1966,\n",
      "        5.1399, 3.6038, 4.9230, 4.5786, 4.2555, 1.8262, 2.3032, 5.1967, 3.7849,\n",
      "        5.5549, 1.8722, 6.6707, 3.3672, 4.9563, 4.1578, 8.0002, 4.1008, 8.1715,\n",
      "        4.3967, 9.3394, 2.0104, 7.2679, 3.7779, 4.6741, 3.3371, 5.4199, 5.2684,\n",
      "        5.8190, 3.2002, 6.1125, 5.3699, 4.0396, 5.4539, 5.0324, 5.1305, 3.2950,\n",
      "        4.1325, 3.4888, 8.2201, 3.3530, 6.0760, 7.1020, 6.3965, 4.8419, 3.5177,\n",
      "        5.8472, 2.2396, 6.2043, 4.6014, 6.5886, 9.0725, 4.6180, 3.7817, 6.9961,\n",
      "        4.8621, 6.5735, 4.4417, 4.6976, 9.4405, 3.7978, 3.5759, 7.2270, 3.2064,\n",
      "        5.4002, 2.7386, 4.2593, 6.7052, 5.7930, 3.3015, 5.0189, 3.3711, 3.8814,\n",
      "        3.9744, 2.0307]),\n",
      "indices=tensor([6, 1, 4, 4, 6, 1, 4, 8, 9, 6, 2, 5, 5, 9, 0, 0, 7, 0, 1, 0, 3, 3, 9, 7,\n",
      "        3, 1, 8, 6, 8, 4, 0, 2, 0, 6, 9, 6, 8, 0, 6, 4, 4, 5, 6, 4, 2, 1, 4, 3,\n",
      "        1, 8, 6, 6, 7, 3, 3, 5, 5, 9, 5, 4, 5, 9, 5, 3, 3, 7, 4, 6, 9, 0, 5, 2,\n",
      "        9, 0, 7, 0, 7, 1, 2, 2, 3, 3, 1, 4, 3, 0, 9, 4, 6, 7, 3, 8, 0, 9, 9, 0,\n",
      "        6, 1, 9, 2, 4, 3, 5, 4, 0, 5, 8, 6, 1, 7, 9, 8, 0, 9, 4, 0, 3, 1, 5, 2,\n",
      "        2, 3, 7, 4, 4, 5, 9, 1]))\n",
      "torch.return_types.max(\n",
      "values=tensor([7.6354, 5.0161, 2.8647, 3.9274, 6.6388, 5.9753, 3.7130, 2.6510, 4.0000,\n",
      "        4.8159, 6.2208, 5.8189, 5.7130, 7.2116, 3.0120, 7.6784, 4.3106, 6.3854,\n",
      "        4.9158, 5.0941, 3.2407, 5.2813, 7.1645, 5.5085, 2.8956, 5.3520, 4.0211,\n",
      "        5.8824, 2.1310, 5.9555, 4.4450, 2.2392, 3.5540, 4.2509, 6.8050, 4.5744,\n",
      "        5.1586, 4.3451, 4.6956, 2.7012, 4.4326, 3.3425, 3.3512, 5.2908, 5.0177,\n",
      "        3.4988, 7.9617, 5.2741, 2.9978, 4.5829, 5.0399, 2.8681, 4.6793, 5.9027,\n",
      "        4.2716, 4.9164, 3.7638, 6.3398, 5.1414, 5.2846, 6.6766, 5.8808, 4.9740,\n",
      "        7.2120, 4.0767, 5.6442, 6.1734, 5.4541, 3.4549, 5.3372, 3.1295, 4.3237,\n",
      "        5.6463, 6.1648, 2.3030, 3.1421, 3.7759, 4.3022, 4.1346, 7.3107, 4.3589,\n",
      "        3.2873, 8.4384, 7.3654, 6.3140, 4.0192, 1.8315, 5.2841, 1.2772, 6.4431,\n",
      "        4.7922, 5.8659, 3.8632, 4.8557, 1.4982, 4.9147, 5.6412, 4.8042, 2.0426,\n",
      "        4.9752, 2.0650, 6.6056, 4.2064, 5.7746, 4.8501, 7.1315, 4.7376, 1.9945,\n",
      "        1.4778, 6.1687, 5.2832, 6.5343, 6.1134, 6.1342, 4.0600, 2.9716, 5.0240,\n",
      "        7.4948, 6.2682, 4.0278, 2.6025, 6.2227, 5.9834, 6.2798, 4.1233, 2.4169,\n",
      "        4.0656, 6.1091]),\n",
      "indices=tensor([7, 1, 9, 8, 4, 5, 1, 9, 4, 4, 2, 1, 8, 7, 4, 7, 3, 2, 8, 1, 1, 4, 7, 8,\n",
      "        8, 3, 2, 8, 2, 2, 4, 8, 4, 8, 5, 8, 1, 5, 5, 4, 2, 9, 5, 8, 4, 9, 0, 4,\n",
      "        9, 3, 8, 9, 5, 2, 1, 5, 1, 7, 9, 4, 0, 1, 4, 2, 1, 3, 1, 5, 2, 9, 6, 1,\n",
      "        5, 6, 7, 6, 9, 1, 4, 0, 0, 0, 7, 2, 7, 8, 6, 7, 5, 2, 0, 5, 4, 1, 9, 1,\n",
      "        5, 8, 8, 5, 5, 6, 1, 4, 4, 0, 8, 9, 4, 7, 7, 3, 1, 6, 8, 8, 0, 0, 7, 8,\n",
      "        7, 7, 2, 4, 5, 0, 3, 6]))\n",
      "torch.return_types.max(\n",
      "values=tensor([4.8511, 2.8920, 5.2161, 7.0771, 5.0481, 4.8534, 5.0868, 4.1039, 6.5079,\n",
      "        4.0384, 4.0231, 7.1805, 2.4399, 3.9192, 3.4063, 7.5470, 8.6659, 5.4142,\n",
      "        7.1695, 6.8133, 3.9662, 6.6145, 4.3813, 4.7487, 8.5597, 4.2956, 6.9034,\n",
      "        4.2160, 3.3227, 8.1489, 4.2715, 4.2165, 5.9627, 3.0349, 5.5001, 4.4518,\n",
      "        4.4893, 4.7712, 3.9215, 4.0153, 5.5857, 6.8665, 4.0649, 2.7571, 5.6553,\n",
      "        5.1648, 6.3966, 4.1253, 4.8443, 4.7516, 6.6175, 5.0969, 4.8225, 5.1252,\n",
      "        5.3105, 5.5472, 4.8626, 4.0951, 3.6289, 5.5315, 2.4156, 4.6979, 7.7718,\n",
      "        5.7114, 3.4358, 7.9742, 4.3968, 7.6931, 2.9519, 8.7670, 5.1466, 4.4725,\n",
      "        3.0847, 6.2913, 6.1755, 4.8733, 3.8717, 4.4670, 3.5015, 4.6104, 3.2598,\n",
      "        6.0241, 3.9359, 6.3491, 4.7956, 5.2801, 4.5465, 2.2636, 4.0404, 6.7391,\n",
      "        5.6556, 1.9811, 3.8378, 5.9970, 3.2885, 1.6366, 4.9303, 4.7619, 3.7059,\n",
      "        3.8499, 8.3476, 6.7057, 3.7293, 3.7547, 3.9377, 5.6612, 5.5618, 2.4900,\n",
      "        3.4270, 6.1357, 3.3123, 4.4722, 6.2289, 6.9400, 2.6259, 6.3624, 6.6368,\n",
      "        4.8568, 5.6699, 6.0538, 5.4267, 7.6809, 8.0239, 4.2424, 4.9920, 2.8617,\n",
      "        5.9867, 2.5756]),\n",
      "indices=tensor([4, 9, 8, 2, 0, 6, 4, 5, 9, 8, 7, 6, 8, 9, 7, 0, 7, 4, 7, 0, 3, 6, 4, 1,\n",
      "        0, 9, 7, 6, 8, 0, 8, 9, 7, 5, 3, 1, 0, 3, 7, 7, 4, 6, 9, 9, 0, 4, 6, 8,\n",
      "        3, 3, 0, 7, 1, 7, 5, 6, 1, 7, 9, 0, 0, 5, 7, 6, 3, 2, 9, 2, 8, 0, 1, 1,\n",
      "        4, 2, 3, 3, 5, 4, 9, 3, 7, 6, 7, 7, 4, 8, 9, 9, 3, 0, 1, 1, 5, 2, 7, 1,\n",
      "        4, 4, 2, 5, 7, 6, 8, 7, 3, 8, 1, 9, 2, 0, 7, 1, 0, 2, 0, 3, 4, 5, 7, 6,\n",
      "        6, 7, 0, 8, 3, 8, 6, 9]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 2.9240,  3.5205,  2.0288,  4.3281,  3.9818,  8.6771,  6.4745,  4.4307,\n",
      "         5.6363,  4.6195,  3.6251,  3.3033,  4.6998,  4.9617,  6.5015,  6.0162,\n",
      "         3.7488,  5.8886,  5.2170,  3.7683,  7.4928,  6.5327,  5.3198,  3.1315,\n",
      "         7.3964,  6.7322,  4.8049,  4.9937,  5.0154,  5.3276,  8.8096,  5.3344,\n",
      "         3.5235,  5.0122,  5.0945,  3.9141,  4.6707,  5.7120,  2.5318,  6.3984,\n",
      "         5.0359,  6.0701,  8.3494,  2.5593,  4.5539,  7.2913,  6.5278,  5.2756,\n",
      "         2.8093,  4.6374,  4.4379,  7.6681,  4.3413,  3.1332,  4.4319,  6.7544,\n",
      "         5.7425,  4.8153,  1.6626,  5.2485,  4.7983,  3.6542,  2.8259,  4.6882,\n",
      "         7.3619,  4.4348,  3.7877,  4.7472,  3.3940,  3.7067,  6.6175,  2.8130,\n",
      "         4.4844,  4.9610,  4.0435,  4.8651,  6.7670,  4.9722,  9.6478,  3.6635,\n",
      "         6.5970,  8.4972,  5.1016,  6.9725,  3.3165,  5.6516,  3.6002,  2.8644,\n",
      "         2.9688,  4.8848,  5.5657,  6.8184,  5.9000,  2.7231,  2.0761,  4.8745,\n",
      "         5.3203, 11.4822,  7.4983,  5.3369,  3.4304,  8.2845,  4.1817,  7.7801,\n",
      "         2.9081,  5.9038,  3.6034, 10.6919,  3.1290,  5.6935,  5.2670,  8.0237,\n",
      "         4.7833,  7.1751,  3.0222,  2.0786,  4.9079,  3.4732,  3.1432,  5.0567,\n",
      "         1.7892,  3.4722,  6.3494,  7.3975,  2.9851,  6.1130,  3.8082,  3.5777]),\n",
      "indices=tensor([3, 5, 0, 7, 4, 0, 7, 3, 8, 1, 1, 4, 2, 1, 7, 7, 8, 6, 7, 5, 6, 6, 4, 4,\n",
      "        6, 2, 5, 7, 0, 8, 2, 1, 8, 3, 6, 4, 4, 3, 5, 7, 6, 2, 0, 5, 1, 0, 3, 1,\n",
      "        7, 9, 3, 2, 9, 3, 6, 2, 1, 3, 5, 5, 7, 5, 1, 7, 6, 3, 8, 4, 9, 9, 2, 9,\n",
      "        1, 7, 1, 1, 7, 1, 0, 9, 0, 0, 1, 7, 2, 8, 0, 3, 3, 8, 9, 6, 4, 3, 7, 5,\n",
      "        3, 0, 0, 9, 8, 6, 5, 2, 6, 1, 9, 0, 1, 1, 7, 0, 7, 6, 4, 2, 1, 6, 8, 8,\n",
      "        6, 9, 7, 0, 7, 7, 8, 7]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 4.5840,  6.6846,  3.1010,  5.4720,  5.5858,  4.2387,  3.4312,  4.3029,\n",
      "         2.8316,  8.2582,  3.7858,  5.2828,  4.6728,  3.7252,  8.0952,  5.4616,\n",
      "         3.1963,  4.1509,  6.2318,  5.8060,  6.0650,  5.3395,  5.4273,  4.6510,\n",
      "         2.8365,  3.4631,  4.2506,  4.3777,  6.0150,  5.1619,  8.4527,  5.6775,\n",
      "         5.3782,  5.5156,  4.5884,  7.9809,  5.6959,  7.4785,  2.5560,  3.0509,\n",
      "         5.5409,  6.7555,  3.7311,  4.1269,  4.4469,  5.2994,  4.1495,  3.6667,\n",
      "         6.5777,  4.7129,  7.4377,  8.8556,  3.6389,  7.4548,  6.0334,  5.9299,\n",
      "         2.8221,  3.6417,  2.8762, 10.4428,  4.4744,  3.7755,  6.7991,  5.5038,\n",
      "         5.0561,  8.2374,  5.7641,  4.4954,  4.2609,  3.8073,  4.1134,  8.0380,\n",
      "         4.2773,  7.0906,  5.3125,  5.6892,  3.7842,  4.6753,  5.4595,  8.3341,\n",
      "         5.5325,  3.6087,  6.1683,  4.7814,  4.0816,  4.0137,  4.1825,  6.3527,\n",
      "         5.2843,  5.5342,  4.6978,  7.7413,  3.2534,  5.6926,  5.7328,  5.2297,\n",
      "         4.1523,  4.2248,  4.1820, 10.1862,  5.3657,  5.4604,  4.5118,  7.3467,\n",
      "         5.0848,  4.9374,  4.9740,  6.8299,  5.1589,  5.2741,  8.4218,  9.1605,\n",
      "         3.3197,  9.3651,  4.7525,  5.2689,  4.3440,  3.4645,  2.7779,  4.8023,\n",
      "         5.6492,  5.2350,  9.3737,  6.0951,  6.1259,  9.8578,  1.3791,  6.3816]),\n",
      "indices=tensor([1, 3, 5, 4, 1, 5, 0, 3, 1, 2, 3, 3, 1, 3, 7, 4, 1, 2, 0, 6, 4, 6, 6, 7,\n",
      "        7, 9, 8, 1, 9, 8, 0, 2, 1, 1, 9, 2, 6, 6, 7, 3, 1, 3, 4, 4, 4, 7, 4, 9,\n",
      "        0, 4, 6, 0, 9, 0, 8, 5, 5, 9, 1, 0, 8, 1, 6, 2, 5, 3, 7, 9, 0, 5, 7, 6,\n",
      "        1, 7, 3, 8, 5, 9, 1, 0, 6, 1, 3, 2, 4, 5, 4, 4, 1, 5, 6, 6, 5, 7, 1, 8,\n",
      "        2, 9, 3, 0, 7, 1, 4, 2, 9, 3, 2, 4, 1, 5, 0, 6, 1, 7, 4, 8, 1, 7, 9, 0,\n",
      "        3, 0, 0, 1, 7, 0, 5, 1]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 3.8419,  9.0908,  2.7721,  8.2128,  3.6218,  6.7934,  3.0849,  7.8868,\n",
      "         6.2079,  5.6016,  7.7493,  6.9514,  5.9119,  6.4261,  4.7749,  5.9113,\n",
      "         2.5544, 10.3152,  3.6550,  8.5667,  2.0079,  5.4338,  6.8997,  4.7050,\n",
      "         4.1341,  8.6327,  4.6568,  7.8578,  5.3946,  1.5973,  5.3831,  8.1253,\n",
      "         7.1327,  6.9447,  6.6215,  6.6334,  5.9439,  6.5994,  5.1792,  5.2629,\n",
      "         4.3478,  5.9407,  5.8338,  6.2678,  5.7986,  3.7412,  4.4779,  6.3734,\n",
      "         6.9539,  5.6580,  4.8162,  8.3811,  2.6657,  7.7130,  2.1158,  2.5379,\n",
      "         5.7326,  8.9524,  1.2274,  3.1412,  3.3313,  8.4786,  6.4561,  2.3736,\n",
      "         3.7448,  5.0153,  7.0814,  6.4550,  5.0534,  5.8493,  5.6357,  3.9718,\n",
      "         4.2057,  6.2512,  3.4938,  4.2385,  4.2952,  5.1337,  4.0931,  7.7511,\n",
      "         4.3907,  6.5458,  4.6526,  5.1231,  6.3295,  4.6448,  3.8219,  4.8820,\n",
      "         5.4590,  7.5239,  1.7193,  7.2405,  1.8762,  4.5016,  2.7189,  4.8035,\n",
      "         7.1244,  5.4920,  4.8353,  4.0764,  6.2386,  7.2460,  5.4988,  5.5541,\n",
      "         4.5394,  6.3028,  4.3133,  5.1989,  6.3158,  4.4357,  6.3068,  6.3067,\n",
      "         4.7321,  6.2442,  2.9568,  7.7228,  5.5692,  5.8271,  5.3653,  6.1452,\n",
      "         6.3388,  5.2398,  5.5530,  5.3995,  6.6450,  7.5985,  5.1273,  6.5535]),\n",
      "indices=tensor([4, 2, 5, 7, 9, 5, 5, 3, 7, 4, 7, 2, 6, 4, 7, 4, 3, 0, 4, 0, 0, 6, 7, 9,\n",
      "        4, 6, 1, 6, 3, 4, 7, 7, 7, 3, 4, 2, 3, 2, 7, 3, 2, 4, 4, 4, 7, 9, 6, 1,\n",
      "        7, 4, 1, 0, 8, 7, 0, 2, 6, 7, 8, 5, 7, 6, 7, 2, 2, 3, 7, 1, 5, 4, 6, 4,\n",
      "        4, 0, 8, 9, 5, 9, 6, 6, 1, 1, 5, 8, 0, 3, 1, 3, 8, 7, 9, 3, 4, 9, 6, 3,\n",
      "        7, 8, 1, 9, 9, 6, 4, 8, 7, 8, 5, 8, 7, 4, 8, 7, 9, 7, 5, 6, 7, 2, 1, 1,\n",
      "        6, 9, 9, 8, 0, 7, 1, 8]))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.return_types.max(\n",
      "values=tensor([ 4.0948,  3.9964,  1.4238,  5.0899,  4.3857,  5.6931,  2.8896,  5.5365,\n",
      "         3.2025,  7.4636,  2.5081,  3.8024,  3.3866,  6.5475,  8.8470,  6.9445,\n",
      "         3.7234,  8.7360,  4.6954,  7.2351,  3.5340,  5.3036,  4.3172,  3.1304,\n",
      "         7.8480,  8.0174,  4.0815,  1.9843,  3.8494,  7.1641,  6.3616,  5.3925,\n",
      "         4.2489,  4.9329,  5.6150,  3.6506,  4.5934,  8.7983,  5.3291,  4.3531,\n",
      "         4.2390,  5.9564,  8.1122,  5.6968,  4.6611,  6.6985,  3.2748,  4.5250,\n",
      "         4.5159,  6.3792,  1.8344,  7.2922,  6.0097,  6.3106,  6.0813,  4.4277,\n",
      "         8.2099,  8.7043,  4.3899,  6.1874,  4.6168,  6.9866,  4.0658,  4.3872,\n",
      "         3.4011,  5.1199,  3.1595,  2.7628,  5.3844,  3.8365,  3.9445,  6.9594,\n",
      "        12.1940,  6.0813,  4.9285,  5.1492,  3.6524,  7.1779,  2.9341,  5.3746,\n",
      "         2.8454,  6.7929,  5.1884,  4.8201,  3.0131,  5.5898,  3.0073,  3.3052,\n",
      "        10.3310,  3.7745,  5.6204,  5.4882,  1.3704,  3.9792,  4.7952,  6.2941,\n",
      "         3.7622,  6.1303,  5.2781,  5.4166,  2.9795,  3.4104,  5.2084,  3.7827,\n",
      "         3.5188,  4.1188,  3.7985,  4.2151,  5.6726,  4.5559,  4.7181,  5.1354,\n",
      "         4.4652,  2.3876,  4.2666,  8.6940,  2.9611,  6.0717,  3.0909,  3.4235,\n",
      "         6.9020,  5.0820,  6.1594,  5.4518,  4.2048,  4.9475,  3.6459,  4.0793]),\n",
      "indices=tensor([1, 8, 7, 7, 6, 2, 6, 2, 7, 3, 2, 9, 7, 3, 2, 3, 5, 0, 9, 7, 7, 9, 3, 5,\n",
      "        6, 6, 5, 4, 0, 0, 0, 6, 9, 1, 4, 5, 9, 0, 0, 4, 8, 1, 0, 1, 8, 2, 4, 8,\n",
      "        1, 2, 6, 6, 6, 1, 3, 5, 0, 0, 4, 1, 6, 2, 3, 3, 8, 4, 8, 5, 1, 6, 8, 7,\n",
      "        0, 8, 1, 9, 6, 0, 4, 1, 2, 2, 3, 3, 9, 4, 2, 2, 0, 8, 4, 0, 9, 1, 9, 2,\n",
      "        9, 3, 6, 4, 6, 5, 1, 6, 3, 7, 7, 8, 0, 1, 1, 6, 9, 5, 4, 0, 5, 6, 8, 8,\n",
      "        7, 9, 0, 4, 6, 1, 8, 9]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 4.2051,  3.2751,  2.7253,  3.0119,  3.7993,  4.3348,  4.5557,  4.6010,\n",
      "         2.1950,  4.6386,  4.6441,  3.7700,  5.6529,  3.0573,  1.5973,  2.3130,\n",
      "         4.4319,  4.7023,  4.8756,  4.6221,  4.1645,  6.7941,  2.6556,  5.4407,\n",
      "         8.7395,  5.3488,  5.4109,  7.6308,  9.5219,  5.1835,  2.5022,  3.8547,\n",
      "         3.4905,  8.0609,  6.1516,  4.1948,  3.9296,  3.7916,  1.4000,  4.1675,\n",
      "         3.5486,  1.9462,  3.4817,  6.2405,  2.8663,  2.5305,  2.1758,  3.5482,\n",
      "         3.6188,  4.9464,  2.1718,  5.1882,  9.8861,  3.4924,  3.9422,  4.8491,\n",
      "         4.8724,  4.2675,  7.6888,  4.6597,  3.2129,  4.5453,  5.0957,  5.6890,\n",
      "         5.9930,  3.4388,  4.0961,  4.6366,  5.0721,  4.7098,  7.7419,  4.9205,\n",
      "         3.1775,  8.1089,  4.4264,  7.0399,  2.6228,  7.4115,  3.7075,  6.1191,\n",
      "        10.8538,  4.1871,  6.4428,  5.7356,  3.1944,  6.8110,  6.1872,  4.9601,\n",
      "         3.9618,  6.6583,  6.2297,  6.4112,  2.7875,  4.3304,  5.0178,  4.7393,\n",
      "         3.1304,  5.2109,  4.6924,  4.2362,  4.7764,  5.3509,  5.1376,  6.9907,\n",
      "         2.6994,  5.1636,  2.9372,  5.6368,  3.9542,  6.5671,  2.9903,  4.7698,\n",
      "         3.9708,  6.7638,  5.3217,  4.0784,  1.1784,  6.6148,  4.7449,  3.7920,\n",
      "         3.8905,  6.3340, 10.5461,  8.3745,  4.2427,  1.6998,  4.7516,  2.0380]),\n",
      "indices=tensor([3, 7, 6, 4, 7, 8, 1, 9, 7, 1, 9, 4, 9, 0, 9, 3, 3, 1, 1, 4, 8, 0, 8, 7,\n",
      "        0, 6, 7, 0, 0, 1, 8, 7, 9, 0, 7, 6, 1, 8, 7, 9, 8, 0, 9, 7, 8, 9, 2, 8,\n",
      "        3, 6, 8, 0, 0, 8, 1, 1, 2, 7, 7, 7, 9, 1, 4, 3, 2, 2, 5, 3, 8, 1, 7, 4,\n",
      "        2, 2, 4, 0, 8, 0, 8, 7, 0, 8, 6, 4, 5, 6, 4, 4, 5, 9, 2, 3, 5, 8, 7, 4,\n",
      "        5, 7, 6, 2, 6, 3, 2, 6, 4, 9, 4, 6, 9, 3, 7, 2, 9, 2, 0, 4, 9, 6, 6, 4,\n",
      "        1, 0, 0, 2, 8, 5, 3, 5]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 3.3502,  5.0267,  3.8053,  3.5906,  5.3179,  3.2383,  4.3297,  3.8793,\n",
      "        11.4542,  3.8984,  3.9221,  4.2286,  2.9359,  5.1538,  2.1729,  4.7964,\n",
      "         7.6897,  5.9240,  5.7078,  4.6622,  2.9023,  4.1668,  4.4682,  2.7477,\n",
      "         5.8754,  5.8524,  4.6225,  4.3189,  4.7755,  5.2721,  5.4584,  5.4115,\n",
      "         5.5729,  9.2566,  5.0512,  5.4029,  5.6103,  5.2618,  5.3661,  5.1637,\n",
      "         3.4227,  5.4555,  2.5257,  2.7561,  5.6351,  7.3150,  5.8574,  3.0861,\n",
      "         1.9711,  5.1413,  4.1283,  5.5990,  5.8504,  8.5510,  5.3977,  5.7401,\n",
      "         3.6326,  7.3381,  2.2841,  6.4249,  3.8364,  5.4750,  7.5408,  1.7687,\n",
      "         6.2245,  7.7703,  2.0289,  3.4845,  2.0987,  6.4011,  5.2958,  4.0220,\n",
      "         5.3375,  8.9022,  5.1223,  5.3289,  2.5972,  3.8143,  5.7185,  5.8390,\n",
      "         3.1178,  4.3204,  5.0137,  1.9065,  5.9243,  8.3392,  3.3467,  3.0032,\n",
      "         2.0610,  5.1033,  3.6363,  4.8118,  4.8237,  4.2967,  2.1558,  4.7136,\n",
      "         6.0457,  6.4103,  6.0940,  4.3095,  3.8809,  3.4120,  2.3638,  4.3629,\n",
      "         4.5061,  3.7623,  3.2136,  6.8484,  3.0892,  4.0126,  8.1170,  5.2144,\n",
      "         2.0616,  4.9809,  4.4382,  4.9954,  5.5358,  4.7425,  2.1893,  5.5536,\n",
      "         4.3952,  4.7804,  5.7553,  4.3212,  5.6598,  4.1239,  4.4288,  4.2830]),\n",
      "indices=tensor([5, 1, 1, 3, 5, 3, 8, 9, 0, 7, 7, 8, 9, 7, 5, 2, 4, 2, 0, 9, 1, 8, 1, 2,\n",
      "        1, 1, 3, 3, 7, 1, 6, 3, 8, 0, 0, 1, 7, 2, 9, 3, 4, 4, 8, 7, 8, 6, 0, 0,\n",
      "        8, 8, 6, 9, 1, 0, 1, 1, 4, 2, 6, 3, 4, 4, 7, 3, 3, 6, 1, 0, 9, 8, 8, 9,\n",
      "        5, 0, 5, 1, 1, 2, 4, 3, 3, 4, 1, 3, 0, 6, 6, 7, 6, 8, 9, 9, 6, 0, 2, 8,\n",
      "        3, 3, 1, 9, 1, 5, 7, 5, 1, 2, 9, 6, 3, 8, 3, 4, 0, 9, 7, 1, 2, 7, 7, 1,\n",
      "        0, 2, 4, 3, 7, 5, 9, 4]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 4.8044,  6.8719,  6.3585,  4.9595,  6.1644,  5.4735,  4.0181,  5.6453,\n",
      "         2.6653,  4.7076,  7.5848,  2.5415,  3.0306,  4.9605,  4.0868,  2.5791,\n",
      "         4.6024,  6.7269,  5.2742,  4.5370,  2.4115,  5.9615,  3.1996,  3.7261,\n",
      "         3.8625,  8.5043,  5.3041,  5.8827,  3.5512,  7.1444,  5.4236,  3.1780,\n",
      "         6.1004,  4.7647,  4.2969,  2.4902,  2.9694,  6.6743,  1.8965,  2.1862,\n",
      "         1.7454,  4.8821,  4.7920,  5.5381,  3.9204,  3.4116,  4.1994,  5.0133,\n",
      "         6.0261,  3.1491,  3.0631,  5.6194,  3.1860, 10.2022,  6.9251,  4.0920,\n",
      "         3.5112,  6.1628,  4.2099,  4.9799, 11.6814,  4.2557,  4.7473,  7.6238,\n",
      "         6.6437,  5.7189,  3.4866,  4.3915,  8.6677,  7.9417,  6.2252,  4.5098,\n",
      "         2.6281,  2.1919,  3.7859,  5.4457,  5.6373,  5.3012,  4.5560,  5.2431,\n",
      "         1.7216,  4.0912,  4.7368,  4.1016,  4.4149,  5.3207,  4.7669,  2.3606,\n",
      "         4.8650,  5.5631,  5.6172,  2.5314,  3.4664,  5.7123,  7.7448,  3.7558,\n",
      "         3.6603, 11.1800,  3.8365,  9.2835,  2.5000,  9.5210,  4.6309,  6.1612,\n",
      "         3.5960,  6.0656,  7.0820,  3.1359,  3.5593,  5.1413,  2.4641,  5.9904,\n",
      "         4.6596,  4.5567,  4.1942,  5.1209,  4.4014,  7.2393,  7.2127,  4.5740,\n",
      "         4.6290,  3.7270,  3.3865,  6.7582,  6.9314,  3.9124,  4.1846,  4.6142]),\n",
      "indices=tensor([0, 6, 0, 9, 3, 1, 5, 1, 8, 1, 3, 0, 2, 9, 1, 3, 5, 6, 6, 8, 8, 1, 8, 7,\n",
      "        5, 0, 1, 7, 3, 7, 0, 3, 4, 8, 5, 2, 8, 9, 4, 8, 3, 7, 3, 1, 1, 3, 2, 4,\n",
      "        7, 5, 5, 6, 8, 0, 7, 3, 8, 6, 4, 8, 0, 0, 2, 0, 6, 4, 1, 2, 0, 7, 2, 7,\n",
      "        4, 5, 4, 4, 7, 3, 9, 4, 9, 2, 1, 8, 9, 1, 4, 7, 0, 1, 7, 4, 2, 4, 0, 3,\n",
      "        5, 0, 2, 0, 3, 0, 1, 3, 1, 3, 3, 5, 5, 7, 9, 0, 0, 6, 1, 8, 1, 6, 7, 3,\n",
      "        2, 4, 1, 6, 0, 9, 4, 9]))\n",
      "torch.return_types.max(\n",
      "values=tensor([4.5538, 5.0928, 5.3389, 3.1807, 3.5800, 8.2529, 5.7721, 4.3775, 4.8522,\n",
      "        4.8968, 3.2956, 5.9534, 5.4767, 5.0235, 5.3168, 4.4952, 6.4994, 3.3099,\n",
      "        4.7057, 6.5102, 4.7197, 7.2992, 3.9917, 4.8248, 4.5270, 4.5371, 3.2702,\n",
      "        6.6303, 2.4090, 5.6765, 3.9153, 2.6910, 4.9810, 6.8883, 4.2352, 5.4710,\n",
      "        3.7989, 1.8018, 3.2762, 5.6582, 6.0286, 5.6410, 4.3825, 3.7633, 3.6268,\n",
      "        5.9622, 5.1070, 6.9807, 2.1096, 5.3798, 1.9532, 5.9947, 2.8668, 1.2719,\n",
      "        6.3031, 5.5168, 2.3481, 5.0822, 5.1020, 6.3763, 3.8809, 5.3989, 2.9601,\n",
      "        4.8138, 6.5412, 6.2623, 7.1942, 7.0220, 4.5080, 6.3769, 6.3559, 5.8151,\n",
      "        7.3209, 1.8520, 4.4254, 5.6218, 7.6491, 4.8089, 4.9041, 1.8320, 6.6881,\n",
      "        2.9875, 2.9817, 1.8036, 6.0840, 2.7988, 4.5394, 2.3759, 2.5983, 5.7498,\n",
      "        4.7127, 5.3741, 1.7127, 5.0799, 4.6305, 5.7730, 5.4373, 5.5347, 4.8802,\n",
      "        2.2509, 3.7505, 7.4063, 5.7578, 3.5955, 3.5888, 4.6262, 5.0985, 5.6331,\n",
      "        2.6399, 5.0369, 7.7721, 6.5213, 8.3238, 5.7968, 6.9015, 4.6591, 3.6576,\n",
      "        4.6063, 5.2203, 6.4617, 5.7823, 5.8133, 5.5174, 5.5455, 5.6694, 5.7226,\n",
      "        5.8425, 4.3035]),\n",
      "indices=tensor([3, 8, 3, 2, 9, 7, 1, 7, 9, 1, 8, 0, 1, 1, 6, 2, 1, 8, 2, 4, 9, 7, 2, 8,\n",
      "        2, 9, 9, 0, 9, 1, 1, 2, 6, 3, 7, 4, 1, 6, 0, 6, 1, 7, 4, 8, 3, 9, 5, 0,\n",
      "        5, 1, 6, 2, 9, 9, 2, 7, 5, 8, 4, 9, 8, 7, 5, 9, 3, 5, 6, 0, 3, 8, 0, 3,\n",
      "        2, 5, 6, 4, 2, 8, 7, 4, 7, 1, 6, 2, 6, 2, 5, 5, 1, 8, 6, 8, 1, 1, 6, 6,\n",
      "        2, 1, 3, 8, 4, 0, 7, 3, 5, 6, 4, 9, 8, 3, 7, 7, 0, 4, 4, 9, 2, 7, 0, 0,\n",
      "        4, 9, 7, 7, 4, 7, 7, 4]))\n",
      "torch.return_types.max(\n",
      "values=tensor([4.7749, 2.6885, 7.7425, 6.5138, 6.3581, 4.0083, 4.7026, 7.0737, 4.8922,\n",
      "        4.2904, 4.3492, 5.4026, 3.7530, 6.8045, 2.6597, 6.3313, 5.7540, 5.4347,\n",
      "        3.9661, 5.4647, 2.9624, 4.6701, 3.8296, 1.6695, 6.6497, 6.1330, 6.7744,\n",
      "        5.1243, 3.0196, 5.4900, 7.4668, 5.3781, 6.0603, 4.2926, 5.4498, 5.8832,\n",
      "        6.1463, 5.9464, 3.3015, 4.7805, 5.7476, 3.8133, 5.3622, 6.8941, 3.8400,\n",
      "        2.6337, 3.5013, 5.2747, 5.7048, 3.6993, 4.9536, 5.2166, 6.1980, 4.9320,\n",
      "        9.1073, 5.4202, 4.0155, 6.4036, 2.3715, 3.5347, 2.9005, 4.4734, 4.8401,\n",
      "        5.6570, 6.0703, 2.7491, 4.4082, 3.7873, 7.0692, 5.9392, 4.3118, 5.5752,\n",
      "        2.5907, 5.2924, 6.2054, 5.6549, 2.8938, 9.2095, 3.1470, 5.6941, 4.1511,\n",
      "        3.2237, 6.1170, 5.9451, 5.6388, 5.0919, 4.8802, 2.8352, 4.3023, 4.1606,\n",
      "        6.0757, 5.1974, 5.5076, 8.4487, 6.4716, 4.1236, 3.0895, 2.5133, 8.9197,\n",
      "        4.4476, 2.9746, 5.2529, 3.7332, 3.3054, 4.9039, 5.0196, 7.2478, 4.3547,\n",
      "        2.8548, 4.7341, 5.5970, 4.2239, 3.7867, 3.4536, 2.9661, 4.8930, 4.1015,\n",
      "        5.3048, 5.3043, 3.4474, 2.1388, 3.7631, 5.7804, 5.7444, 8.7177, 4.9535,\n",
      "        4.6171, 3.6258]),\n",
      "indices=tensor([1, 5, 6, 7, 7, 6, 0, 4, 7, 8, 8, 9, 7, 6, 8, 9, 3, 4, 9, 1, 7, 2, 2, 2,\n",
      "        7, 6, 6, 1, 8, 7, 4, 2, 3, 4, 0, 6, 2, 4, 9, 6, 2, 5, 3, 0, 8, 2, 5, 1,\n",
      "        7, 0, 8, 1, 2, 2, 2, 1, 3, 7, 5, 8, 3, 1, 1, 2, 8, 8, 8, 2, 2, 7, 6, 9,\n",
      "        8, 3, 2, 9, 3, 0, 4, 1, 6, 2, 0, 3, 9, 4, 7, 5, 8, 6, 0, 7, 1, 0, 7, 1,\n",
      "        3, 2, 0, 3, 7, 7, 2, 8, 6, 7, 2, 0, 8, 1, 6, 9, 8, 8, 8, 7, 8, 2, 7, 5,\n",
      "        0, 1, 9, 6, 7, 4, 8, 3]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 7.2766,  2.4370, 10.9319,  2.0339,  5.0418,  6.6854,  2.5236,  2.4191,\n",
      "         5.7684,  5.4945,  5.3747,  7.3097,  5.9199,  7.7171,  7.6539,  2.8981,\n",
      "         4.2279,  4.5263,  3.5680,  4.3898,  4.9917,  3.4807,  3.2475,  5.5628,\n",
      "         5.1197,  6.5880,  5.0128,  7.8950,  3.0029,  3.8818,  3.0432,  4.6053,\n",
      "         6.2678,  2.4295,  2.8944,  5.0496,  3.6750,  5.1750,  5.0730,  6.1024,\n",
      "         4.0527,  4.5531,  5.3698,  5.6049,  3.4801,  3.8817,  2.5209,  7.6556,\n",
      "         4.2588,  3.4260,  3.1070,  2.5755,  3.4559,  4.7701,  4.4877,  4.8073,\n",
      "         2.6909,  2.4263,  5.5766,  3.8950,  4.0152,  2.6258,  3.1157,  2.1315,\n",
      "         4.3617,  4.2100,  7.1554,  2.5796,  2.1245,  4.2960,  5.4403,  4.0305,\n",
      "         5.2712,  3.6544,  8.1409,  2.3690,  6.5468,  8.2322,  8.0819,  5.1238,\n",
      "         7.4231,  5.0252,  5.0222,  3.0913,  3.9957,  4.8480,  3.8762,  2.6528,\n",
      "         3.3214,  6.4314,  2.1676,  4.1079,  3.5522,  3.4153,  3.8037,  4.9391,\n",
      "         5.0211,  5.2899,  4.6848,  4.4706,  5.6605,  2.6228,  4.0929,  5.7051,\n",
      "         8.9703,  5.6519,  4.5065,  2.7989,  7.2653,  1.3683,  6.6608,  6.6814,\n",
      "         6.7951,  3.9283,  3.0636,  6.2309,  4.1587,  4.6923,  8.5446,  5.4443,\n",
      "         3.7785,  5.4413,  6.7790,  3.7082,  6.9972,  3.9818,  6.0692,  4.3762]),\n",
      "indices=tensor([3, 5, 0, 3, 1, 0, 6, 4, 9, 3, 4, 6, 7, 0, 2, 6, 8, 3, 3, 9, 0, 7, 7, 7,\n",
      "        4, 0, 4, 0, 4, 4, 5, 1, 4, 9, 1, 1, 2, 3, 1, 6, 0, 4, 1, 7, 4, 7, 2, 0,\n",
      "        0, 9, 0, 3, 3, 4, 3, 3, 8, 8, 1, 3, 1, 8, 6, 3, 4, 8, 0, 4, 7, 1, 3, 7,\n",
      "        2, 9, 6, 7, 6, 0, 6, 9, 0, 1, 3, 0, 6, 3, 3, 8, 0, 0, 6, 3, 8, 1, 7, 1,\n",
      "        9, 6, 1, 4, 1, 3, 9, 6, 0, 1, 9, 5, 3, 8, 2, 6, 7, 5, 9, 0, 9, 1, 0, 2,\n",
      "        8, 3, 6, 4, 3, 5, 3, 6]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 2.6488,  6.0148,  7.1932,  5.8376,  3.9794,  5.1146,  4.0615,  5.4034,\n",
      "         5.9840,  5.5628,  6.0228,  4.0031,  3.1858,  3.6008,  1.6311,  5.5967,\n",
      "         3.5407,  4.9522,  3.6010,  6.3674,  4.2510,  4.8594,  5.3865,  4.6520,\n",
      "         6.0084,  4.9081,  4.5174,  3.9070,  4.4243,  2.2595,  6.1291,  5.5351,\n",
      "         5.0153,  4.0148,  2.8567,  5.4156,  4.2475,  4.1549,  4.9703,  6.3801,\n",
      "         3.9983,  4.8665,  2.3656,  5.0389,  2.3676,  3.0114,  4.6333,  5.1523,\n",
      "         4.5469,  3.4019,  6.2488,  5.5818,  4.1109,  4.1933,  3.3943,  4.1076,\n",
      "         5.4503,  3.9034,  6.1607,  6.4203,  6.2010,  2.6076,  3.8852,  6.2396,\n",
      "         5.3730,  4.9647,  3.4447,  4.1305,  5.1669,  6.5381,  7.9876,  5.0341,\n",
      "         4.0731,  4.3263,  1.9290,  4.2948,  6.2370,  5.8841,  7.1298,  6.6932,\n",
      "         5.3734,  5.7009,  5.0977,  5.5442,  4.1266,  4.1062,  4.5391,  2.6165,\n",
      "         3.4464,  5.2386,  3.1843,  4.4551,  4.7403,  3.2432,  2.8410,  4.5135,\n",
      "         5.0219,  4.5165,  4.4556,  5.8457,  5.0995,  3.5554,  6.1092,  4.1969,\n",
      "         8.6208,  3.4040,  4.0756,  4.5099,  3.8067,  6.8934,  4.4312,  3.6581,\n",
      "         5.0115,  5.4182,  4.7610,  4.5403, 10.8408,  4.4294,  5.4050,  3.8914,\n",
      "         7.1301,  4.6459,  5.2417,  3.9041,  3.6933,  3.6499,  5.0111,  4.7127]),\n",
      "indices=tensor([7, 7, 0, 0, 5, 1, 5, 2, 1, 3, 5, 4, 3, 5, 5, 6, 5, 7, 8, 0, 7, 1, 1, 2,\n",
      "        8, 3, 1, 4, 7, 0, 2, 7, 4, 4, 1, 0, 4, 4, 6, 0, 5, 1, 6, 7, 5, 5, 9, 1,\n",
      "        3, 4, 7, 2, 6, 4, 9, 3, 3, 1, 7, 7, 3, 7, 8, 2, 2, 4, 9, 4, 6, 3, 2, 3,\n",
      "        9, 6, 0, 6, 7, 7, 3, 0, 1, 2, 2, 6, 4, 3, 7, 9, 9, 3, 8, 2, 5, 8, 5, 1,\n",
      "        2, 7, 1, 0, 2, 3, 3, 2, 0, 9, 3, 4, 0, 0, 8, 3, 3, 7, 9, 7, 0, 7, 5, 7,\n",
      "        2, 1, 2, 1, 5, 2, 4, 6]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 5.0363,  4.2045,  2.8649,  3.7536,  5.1863,  4.8047,  3.2595,  4.7313,\n",
      "         4.2823,  3.7417,  6.6984,  2.6130,  4.8545,  4.8239,  5.7089,  3.2139,\n",
      "         4.5142,  4.5020,  3.8783,  3.1706,  4.9395,  4.8564,  4.1784,  5.0255,\n",
      "         6.1941,  4.6670,  7.7665,  6.7024,  5.4540,  3.8186,  5.0464,  4.5573,\n",
      "         4.7792,  3.2745,  6.6479,  3.8071,  3.1951,  4.0924,  6.1648,  3.1952,\n",
      "         2.3500,  7.8844,  5.5800,  5.5439,  7.3473, 10.1376,  3.4470,  7.5017,\n",
      "         4.4731,  4.9222,  4.7304,  5.0205,  5.6308,  6.9540,  6.0668,  8.9962,\n",
      "         7.8296,  5.6174,  4.3026,  7.6754,  5.2203,  4.9969,  4.0601,  8.1641,\n",
      "         3.8572,  6.2085,  7.6670,  3.6732,  5.7625,  2.2180,  2.3656,  5.8672,\n",
      "         5.1993,  8.1047,  6.8065,  5.8325,  4.7323,  3.4630,  2.3940,  8.5138,\n",
      "         4.8815,  4.6238,  4.7479,  7.1848,  3.6331,  6.0973,  3.8856,  5.1786,\n",
      "         3.5401,  4.8732,  5.0256,  7.1580,  5.5831,  7.0010,  6.7992,  5.1391,\n",
      "         5.6607,  5.3938,  3.8331,  9.4229,  2.7499,  4.8212,  4.9542,  5.1867,\n",
      "         3.7850,  5.5411,  5.2096,  5.6596,  4.4140,  4.7960,  5.6240,  3.4814,\n",
      "         3.9890,  4.0418,  3.4052,  4.8947,  5.8014,  7.7490,  3.8304,  4.6736,\n",
      "         4.7187,  2.9164,  3.9913,  4.1893,  3.8955,  5.4741,  9.6346,  7.9929]),\n",
      "indices=tensor([2, 4, 4, 2, 4, 3, 3, 6, 5, 4, 4, 5, 1, 7, 9, 5, 3, 2, 1, 8, 2, 1, 7, 6,\n",
      "        1, 1, 0, 0, 2, 4, 1, 3, 1, 1, 7, 6, 4, 1, 3, 9, 9, 0, 7, 1, 7, 2, 3, 3,\n",
      "        8, 6, 9, 5, 8, 6, 3, 7, 2, 8, 6, 0, 7, 1, 1, 2, 8, 3, 0, 4, 9, 5, 9, 6,\n",
      "        1, 7, 6, 8, 0, 9, 0, 0, 6, 1, 4, 2, 8, 3, 1, 4, 8, 5, 8, 6, 8, 7, 2, 8,\n",
      "        2, 1, 9, 0, 8, 4, 0, 5, 3, 6, 7, 6, 2, 3, 0, 4, 3, 4, 8, 1, 1, 0, 4, 6,\n",
      "        1, 4, 8, 9, 2, 7, 0, 2]))\n",
      "torch.return_types.max(\n",
      "values=tensor([3.3814, 5.4695, 3.9694, 6.2851, 5.3075, 3.9296, 3.7608, 7.6291, 4.0208,\n",
      "        5.6904, 4.1015, 2.4462, 3.8197, 5.7919, 5.5660, 4.6467, 3.4109, 3.7482,\n",
      "        4.7717, 4.0657, 3.6834, 2.1109, 2.5210, 8.3189, 5.2614, 6.1241, 6.5075,\n",
      "        3.8730, 2.4971, 4.8299, 2.9905, 4.0370, 4.1667, 4.9252, 3.6874, 4.1591,\n",
      "        3.3077, 3.2445, 5.6579, 5.5851, 4.3404, 2.8055, 4.8692, 3.5993, 6.0988,\n",
      "        4.5403, 8.6238, 4.4414, 4.0836, 5.2715, 2.3486, 4.7502, 6.1345, 4.5050,\n",
      "        5.6170, 2.7824, 4.4321, 8.6343, 4.8798, 5.3331, 6.6870, 6.5501, 5.8400,\n",
      "        3.7255, 6.7976, 1.8272, 1.6560, 2.9487, 3.2396, 4.9911, 2.2564, 3.2788,\n",
      "        4.4988, 4.2689, 4.1245, 4.8547, 4.0681, 2.6980, 4.8358, 4.6909, 5.0697,\n",
      "        1.6526, 9.4833, 3.6700, 3.2396, 5.3403, 3.4844, 4.9118, 2.2188, 3.5880,\n",
      "        1.5462, 4.3417, 4.5647, 4.9715, 3.4067, 2.0186, 6.0859, 5.7393, 5.3894,\n",
      "        6.5033, 4.3403, 5.4022, 5.8823, 5.2767, 3.9289, 5.5661, 5.7986, 5.8405,\n",
      "        6.2842, 3.6328, 6.2297, 4.9320, 7.6216, 8.3005, 5.2713, 4.8166, 8.3701,\n",
      "        5.9175, 8.3313, 6.5538, 5.8165, 7.0251, 3.4916, 3.4577, 3.5075, 6.6286,\n",
      "        4.7857, 3.4409]),\n",
      "indices=tensor([3, 3, 4, 3, 2, 9, 8, 2, 6, 0, 0, 9, 9, 3, 7, 3, 2, 9, 1, 1, 3, 3, 3, 2,\n",
      "        9, 3, 7, 1, 9, 6, 7, 7, 9, 3, 3, 7, 8, 1, 0, 2, 2, 1, 7, 8, 0, 7, 0, 6,\n",
      "        9, 3, 2, 6, 0, 3, 7, 0, 1, 0, 8, 1, 6, 7, 2, 9, 7, 1, 5, 8, 9, 6, 5, 2,\n",
      "        6, 2, 8, 1, 7, 5, 5, 7, 3, 5, 0, 1, 1, 3, 8, 4, 9, 4, 5, 1, 8, 6, 8, 1,\n",
      "        0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3,\n",
      "        4, 7, 8, 9, 9, 1, 5, 6]))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.return_types.max(\n",
      "values=tensor([6.2830, 4.5447, 6.2515, 5.0687, 5.8821, 6.4348, 5.8512, 4.5658, 6.1604,\n",
      "        5.6171, 7.7142, 6.1212, 9.0005, 6.3674, 8.9085, 6.1001, 5.1143, 5.6030,\n",
      "        6.1710, 6.3481, 4.0720, 5.1183, 7.8714, 3.9221, 5.0403, 3.8832, 5.9672,\n",
      "        6.0802, 4.0575, 7.0252, 5.0807, 7.5123, 5.5753, 7.0183, 3.6381, 6.0064,\n",
      "        6.6233, 7.3611, 5.3745, 4.8599, 4.8138, 4.8073, 5.4802, 6.3031, 5.2241,\n",
      "        3.8328, 5.1118, 3.2056, 5.7336, 5.8920, 4.0987, 5.1520, 3.4697, 4.9759,\n",
      "        3.0431, 9.3175, 5.2874, 6.5127, 5.1529, 5.4500, 6.3076, 6.2518, 4.3627,\n",
      "        4.8523, 8.9184, 5.5899, 2.5422, 3.8645, 6.3566, 4.1259, 4.2625, 4.0146,\n",
      "        4.1706, 7.7959, 6.0359, 3.5639, 6.1341, 6.7630, 2.6691, 6.7257, 4.6211,\n",
      "        2.9346, 5.7354, 7.0062, 5.1038, 4.7882, 2.5133, 6.2747, 3.1707, 6.7763,\n",
      "        6.9197, 5.3751, 4.7661, 6.2948, 4.9420, 6.1621, 4.6261, 5.0587, 2.6954,\n",
      "        7.3635, 7.0855, 5.6815, 6.0071, 7.7899, 5.2747, 4.0343, 3.4079, 4.0716,\n",
      "        4.8216, 7.3469, 3.7711, 3.6815, 6.2621, 5.4538, 8.1201, 5.3336, 4.9210,\n",
      "        4.0815, 6.4893, 6.3078, 3.9470, 4.8213, 7.4121, 7.6283, 2.2306, 5.5100,\n",
      "        3.8292, 6.3566]),\n",
      "indices=tensor([2, 5, 4, 8, 1, 7, 1, 8, 3, 8, 7, 1, 7, 7, 0, 1, 4, 4, 4, 4, 4, 9, 7, 2,\n",
      "        6, 5, 4, 3, 8, 7, 9, 0, 6, 4, 2, 3, 7, 0, 1, 4, 8, 8, 1, 2, 4, 0, 1, 8,\n",
      "        4, 2, 9, 9, 2, 9, 6, 0, 5, 3, 3, 6, 3, 1, 2, 5, 0, 3, 9, 6, 1, 5, 5, 9,\n",
      "        9, 0, 1, 2, 3, 4, 5, 6, 9, 3, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2,\n",
      "        3, 4, 5, 6, 7, 8, 9, 6, 8, 2, 3, 7, 4, 6, 1, 6, 6, 8, 0, 1, 7, 1, 7, 3,\n",
      "        5, 5, 2, 2, 8, 2, 5, 4]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 5.2100,  4.8954,  4.8374,  6.0036,  4.0917,  5.3805,  3.6781,  4.6796,\n",
      "         4.5008,  5.8484,  3.9984,  2.8875,  2.5531,  5.0107,  3.9922,  4.6647,\n",
      "         6.0927,  4.3199,  3.7817,  5.3462,  5.4224,  4.2276,  4.6716,  5.2130,\n",
      "         2.1622,  3.7461,  7.3024,  6.5048,  4.9066,  5.2766,  9.7146,  4.8612,\n",
      "         5.6581,  8.3961,  4.0078,  5.0172,  8.5417,  5.2129,  5.2799,  4.9609,\n",
      "         8.1160,  4.2857,  9.4135,  6.3118,  4.8589,  1.5511,  4.1651,  3.7421,\n",
      "         5.0946,  4.5100,  5.5657,  4.1494,  3.1661,  5.0418,  5.3960,  2.6593,\n",
      "         8.6028,  6.3889,  7.0951,  2.9665,  6.3750,  3.3637,  8.9017,  5.6944,\n",
      "         3.7005,  5.3894, 11.1947,  6.2919,  4.7186,  5.9622,  3.2082,  3.0577,\n",
      "         7.2916,  7.6656,  4.6238,  3.9664,  6.5057,  5.5374,  5.0839,  7.5631,\n",
      "         6.0035,  2.2858,  6.9014,  3.9637,  7.4888,  5.4153,  5.1951,  3.6204,\n",
      "         7.7502,  3.6814,  5.6129,  5.1573,  5.7938,  4.6680,  2.3880,  6.3655,\n",
      "         6.3487,  6.0918,  4.3626,  3.2256,  6.1778,  4.4338,  3.5834,  5.0833,\n",
      "         5.4125,  7.5201,  5.2457,  6.2228,  2.8127,  4.8873,  4.7774,  5.5769,\n",
      "         5.3995,  6.0806,  4.3329,  4.7307,  6.2999,  2.1041,  4.0516,  3.5612,\n",
      "         5.6687,  4.5827,  6.0495,  6.6295,  6.7050,  3.3970,  4.2665,  5.5843]),\n",
      "indices=tensor([1, 5, 1, 2, 8, 4, 8, 3, 3, 6, 5, 9, 4, 3, 8, 1, 3, 7, 9, 3, 4, 1, 7, 3,\n",
      "        4, 6, 7, 4, 9, 7, 0, 9, 6, 0, 6, 1, 0, 5, 8, 5, 0, 1, 0, 9, 4, 5, 9, 7,\n",
      "        1, 9, 6, 8, 9, 2, 8, 5, 0, 1, 2, 8, 4, 5, 6, 7, 5, 9, 0, 1, 8, 3, 4, 5,\n",
      "        6, 7, 8, 9, 0, 1, 2, 3, 4, 4, 0, 5, 6, 8, 3, 9, 0, 2, 3, 3, 3, 3, 9, 6,\n",
      "        4, 4, 2, 5, 4, 3, 4, 6, 8, 7, 9, 1, 5, 2, 0, 3, 4, 4, 1, 2, 4, 4, 6, 5,\n",
      "        1, 3, 6, 6, 7, 5, 8, 1]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 5.2518,  5.1038,  7.0741,  4.8049,  4.9785,  8.5815,  8.6849,  9.8757,\n",
      "         2.0944, 11.7170, 10.3673,  6.0038,  2.7185,  9.4628,  8.5510,  5.6977,\n",
      "         3.1916,  6.6693,  6.6377,  4.1918,  4.9584,  3.0638,  3.0693,  2.4559,\n",
      "         5.5356,  6.1232,  6.9519,  4.2130,  4.6820,  3.9996,  6.6209,  6.1501,\n",
      "         7.8791,  5.6932,  5.6977,  5.9087,  3.9951,  8.6068,  5.9735,  7.3211,\n",
      "         8.5581, 10.4895,  8.4911,  4.7171,  5.6582,  5.6908,  6.2438,  5.0059,\n",
      "         4.5953,  6.7584,  4.0132,  4.7560,  7.0617,  4.7979,  6.9224,  4.0551,\n",
      "         5.0944,  2.3884,  5.1288,  6.5609,  3.7455,  4.0701,  6.9392,  5.2382,\n",
      "         6.8967,  5.7981,  4.7968,  4.0263,  5.5772,  8.4342,  2.6737,  3.5248,\n",
      "         5.9166,  7.1313,  6.4524,  9.1371,  6.9668,  4.3701,  5.6774,  6.4750,\n",
      "         6.9335,  3.8782,  6.2925,  4.7815,  7.3100,  7.5658,  6.3104,  3.1027,\n",
      "         4.4128,  4.4682,  3.6969,  2.5271,  2.7786,  7.2272,  5.2225,  2.7029,\n",
      "         5.3228,  4.3486,  7.2472,  1.4434,  5.2650,  3.8363,  3.4033,  2.6232,\n",
      "         4.4738,  4.6842,  2.9621,  3.4809,  3.3289,  4.6302,  7.0389,  4.6787,\n",
      "         5.7257,  4.1429,  4.8410,  5.4771,  4.4296,  5.2952,  3.5122,  4.3698,\n",
      "         7.2936,  2.9694,  4.9145,  7.4915,  4.2065,  3.0576,  5.9514,  6.9037]),\n",
      "indices=tensor([8, 3, 7, 1, 2, 7, 0, 7, 8, 0, 0, 1, 5, 0, 0, 4, 6, 3, 1, 8, 8, 9, 4, 5,\n",
      "        2, 6, 4, 8, 2, 5, 4, 1, 7, 1, 4, 3, 9, 7, 1, 2, 6, 0, 7, 3, 0, 1, 2, 3,\n",
      "        4, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 9, 9,\n",
      "        7, 0, 6, 0, 7, 3, 7, 3, 7, 4, 7, 4, 0, 2, 6, 6, 6, 6, 2, 9, 5, 3, 9, 9,\n",
      "        3, 4, 0, 5, 4, 6, 3, 4, 8, 0, 6, 4, 8, 1, 3, 4, 0, 1, 9, 2, 3, 7, 9, 1,\n",
      "        2, 5, 1, 7, 2, 8, 7, 0]))\n",
      "torch.return_types.max(\n",
      "values=tensor([4.1389, 1.4568, 5.0425, 4.2622, 3.9909, 6.0686, 4.4119, 3.5069, 2.5087,\n",
      "        3.5591, 4.5750, 2.9451, 3.9297, 5.4649, 7.6517, 4.3307, 3.6233, 2.4862,\n",
      "        6.6734, 2.9545, 2.1457, 4.8274, 4.9704, 2.1699, 5.4948, 5.7596, 3.9455,\n",
      "        4.4962, 3.7786, 5.8618, 5.6890, 4.8567, 3.6325, 3.7579, 5.1095, 5.1637,\n",
      "        5.3215, 5.1841, 5.5266, 2.6342, 3.8572, 5.7740, 4.9958, 3.9636, 5.8029,\n",
      "        6.0450, 3.7312, 4.7019, 5.8074, 3.7870, 3.3168, 5.1555, 3.4693, 5.4575,\n",
      "        4.1698, 6.1391, 4.2480, 3.8270, 4.3353, 5.9414, 3.4174, 5.2509, 7.1417,\n",
      "        4.2060, 4.7862, 4.5871, 3.7978, 3.0847, 3.5800, 4.6892, 3.3511, 5.1442,\n",
      "        4.1200, 1.4075, 4.1074, 3.2901, 5.4406, 2.6523, 2.9803, 3.6955, 4.9093,\n",
      "        3.5958, 6.0466, 3.1599, 2.9693, 3.9060, 4.4265, 3.7098, 4.7571, 5.5670,\n",
      "        4.5179, 5.4140, 6.3089, 4.8678, 4.4817, 5.3597, 5.1457, 5.0829, 3.7836,\n",
      "        5.1831, 4.3498, 5.0668, 4.3866, 4.5815, 3.9736, 4.8164, 5.0027, 5.5431,\n",
      "        4.8501, 3.7402, 6.9008, 4.7214, 5.5618, 5.0496, 5.5498, 5.6890, 3.9676,\n",
      "        3.5606, 3.3530, 4.4025, 4.3854, 3.4086, 4.5463, 4.7449, 4.1596, 4.5087,\n",
      "        5.0090, 5.5077]),\n",
      "indices=tensor([1, 9, 6, 4, 1, 2, 3, 0, 0, 6, 1, 3, 1, 7, 2, 1, 6, 8, 0, 9, 7, 1, 6, 5,\n",
      "        1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6,\n",
      "        7, 8, 6, 4, 2, 6, 4, 7, 5, 5, 4, 7, 8, 9, 2, 9, 3, 9, 5, 8, 2, 0, 5, 0,\n",
      "        1, 2, 4, 2, 6, 3, 3, 5, 3, 8, 0, 0, 9, 4, 1, 5, 3, 0, 8, 3, 0, 6, 2, 7,\n",
      "        1, 1, 8, 1, 7, 1, 3, 8, 9, 7, 6, 7, 4, 1, 6, 7, 5, 1, 7, 1, 9, 8, 0, 6,\n",
      "        9, 4, 9, 9, 3, 7, 1, 9]))\n",
      "torch.return_types.max(\n",
      "values=tensor([5.0121, 6.0251, 4.6026, 3.4661, 5.1426, 3.2835, 3.6949, 5.5788, 4.8008,\n",
      "        4.0280, 6.3541, 5.3904, 3.9603, 3.5373, 7.2633, 4.8691, 4.2432, 5.3374,\n",
      "        4.3947, 4.2684, 5.6801, 4.9531, 6.8036, 4.0304, 4.0367, 4.5807, 5.2282,\n",
      "        3.5477, 4.6150, 6.0871, 3.8315, 5.1053, 4.7260, 4.5896, 4.8604, 4.3531,\n",
      "        4.6675, 4.2944, 3.3552, 8.5097, 5.8278, 3.9968, 4.2075, 4.5993, 4.1037,\n",
      "        4.7530, 4.5549, 6.4460, 3.8894, 4.5657, 6.8220, 5.3052, 4.2969, 4.8260,\n",
      "        4.7183, 4.5826, 5.5156, 4.7799, 3.7909, 5.1762, 4.4531, 6.8890, 6.0007,\n",
      "        4.3051, 6.0292, 7.2019, 4.5696, 3.4950, 4.6313, 4.5960, 3.4668, 1.9231,\n",
      "        2.8569, 3.0295, 4.8132, 3.8301, 4.8229, 5.6212, 8.3482, 2.3916, 7.6985,\n",
      "        4.5609, 6.8742, 3.4797, 3.1498, 4.0358, 2.3085, 3.5502, 4.1078, 3.1539,\n",
      "        2.8272, 4.7347, 4.7904, 3.0331, 4.0458, 3.3168, 3.4818, 5.6727, 2.8846,\n",
      "        4.0065, 2.9845, 3.0712, 3.0872, 6.4214, 3.8148, 5.8998, 6.5368, 5.4864,\n",
      "        4.8128, 4.8060, 5.0652, 6.4265, 6.6102, 4.0829, 3.2101, 7.1109, 6.4249,\n",
      "        4.2012, 5.1238, 6.0648, 4.8626, 5.8759, 4.3262, 5.6532, 4.3903, 5.3111,\n",
      "        6.0349, 5.5758]),\n",
      "indices=tensor([2, 2, 5, 3, 7, 8, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1,\n",
      "        2, 3, 4, 5, 6, 7, 1, 9, 8, 1, 0, 5, 5, 1, 9, 0, 4, 1, 9, 3, 1, 4, 7, 7,\n",
      "        8, 3, 0, 6, 5, 5, 3, 3, 3, 9, 8, 1, 4, 0, 6, 1, 0, 0, 6, 2, 1, 1, 3, 4,\n",
      "        3, 1, 7, 8, 4, 6, 0, 2, 0, 3, 6, 1, 9, 1, 5, 9, 9, 8, 2, 4, 9, 4, 6, 5,\n",
      "        3, 2, 5, 5, 9, 4, 1, 6, 5, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4,\n",
      "        5, 6, 7, 8, 9, 3, 1, 2]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 5.2782,  5.4405,  5.0659,  6.0936,  4.3262,  4.1897,  2.7537,  6.1405,\n",
      "         5.6906,  4.5297,  4.0658,  5.0412,  6.4616,  4.1458,  4.5253,  4.0231,\n",
      "         6.7486,  5.0242,  2.7237,  6.7594,  3.3311,  4.6075,  4.0289,  4.9443,\n",
      "         5.0536,  3.5024,  8.9245,  2.8495,  5.1100,  7.9793,  4.2533,  5.0225,\n",
      "         9.7888,  5.0781,  7.4693,  3.5164,  5.8611,  7.2488,  3.4594,  3.1604,\n",
      "         4.4885,  5.5808,  3.7392,  5.8619,  5.8220,  3.4220,  5.8273,  7.6756,\n",
      "         5.3398,  4.9980,  8.5563,  5.1856,  6.9774,  5.8846,  5.7181,  6.1023,\n",
      "         4.2458,  5.8865,  6.3873,  5.4207,  3.8249,  4.9206,  4.5001,  3.4516,\n",
      "         5.6502,  7.0578,  3.8825,  6.2952,  4.2098,  7.4466,  4.8594,  5.6836,\n",
      "         5.0172,  4.2037,  4.6233,  5.8207,  3.9844,  5.3203,  3.2247,  5.7770,\n",
      "         7.2739,  5.8929,  3.5697,  4.2986,  8.4557,  5.1995,  4.2693,  4.7234,\n",
      "         3.6548,  3.1602,  5.5378,  6.8509,  5.0663,  6.2806,  5.6530,  3.7959,\n",
      "         6.7653,  5.1116,  3.6446,  4.6989,  6.9570,  3.6885, 12.5414,  6.5192,\n",
      "         6.6596,  7.0752,  7.0273,  4.9507,  8.3509,  7.5500,  4.9965, 10.9088,\n",
      "         6.8228,  8.1025,  6.6987,  6.5561,  5.2499,  7.9108,  5.9513,  5.1247,\n",
      "         8.7978,  6.6522,  6.9954,  5.9471,  6.1436,  3.9064,  7.6104,  6.5292]),\n",
      "indices=tensor([9, 4, 5, 6, 7, 8, 9, 6, 4, 2, 6, 4, 7, 3, 5, 4, 7, 8, 9, 2, 9, 3, 9, 3,\n",
      "        8, 2, 0, 9, 8, 0, 5, 6, 0, 1, 0, 4, 2, 6, 5, 9, 5, 4, 3, 4, 1, 5, 3, 0,\n",
      "        8, 3, 0, 6, 2, 7, 1, 1, 8, 1, 7, 1, 3, 8, 5, 4, 2, 0, 9, 7, 6, 7, 4, 1,\n",
      "        6, 8, 4, 7, 5, 1, 2, 6, 7, 1, 9, 8, 0, 6, 9, 4, 9, 9, 6, 2, 3, 7, 1, 9,\n",
      "        2, 2, 5, 3, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8,\n",
      "        0, 1, 2, 3, 4, 5, 6, 7]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 4.5385,  2.5487,  5.6488,  6.6276,  6.9101,  5.8124,  5.2291,  5.1118,\n",
      "         4.9251,  5.0072,  2.3131,  5.5231,  8.3807,  9.9570,  8.4253,  6.6629,\n",
      "         2.8436,  5.5773,  4.5396,  4.6709,  3.0844,  5.8219,  8.6509,  6.8109,\n",
      "         5.2668,  6.3084,  6.4540,  6.1707,  6.9232,  2.2498,  3.9191,  6.3748,\n",
      "         6.7223,  5.0709,  4.8933,  6.0818,  4.9498,  7.0516,  4.9617,  5.1865,\n",
      "         5.5757,  4.7624,  4.2296,  6.0228,  7.4640,  3.3663,  4.6023,  5.3196,\n",
      "         6.5747,  6.1492,  5.3778,  7.0898, 10.7632,  4.7649,  5.3033,  4.6090,\n",
      "         5.6888,  8.7839,  4.3038,  6.7008,  4.0293,  4.2817,  2.9775,  8.5912,\n",
      "         5.8717,  6.8355,  5.1430,  4.1514,  5.6379,  6.1245,  6.8307,  6.2961,\n",
      "         6.0183,  5.7419,  5.4524,  6.9102,  6.3159,  8.3407,  6.3190,  6.5420,\n",
      "         5.6119,  6.0048,  4.7236,  8.2717,  5.2356,  5.5608,  5.1154,  3.5245,\n",
      "         5.5785,  3.1672,  4.3133,  7.2120,  4.9780,  6.2549,  5.9487,  3.9137,\n",
      "         5.1488,  2.1325,  4.8622,  7.1834,  5.4731,  6.0321,  5.3383,  4.7205,\n",
      "         2.6473,  6.3702,  5.7217,  4.0546,  6.2782,  4.3160,  5.3966,  5.1633,\n",
      "         4.8246,  7.0159,  5.3084,  1.8392,  6.7337,  4.8185,  6.7413,  4.6832,\n",
      "         4.8727,  5.0132,  5.1821,  4.3850,  3.7921,  5.2185,  4.2145,  4.2935]),\n",
      "indices=tensor([8, 7, 2, 1, 2, 1, 3, 9, 9, 8, 5, 3, 7, 0, 7, 7, 5, 7, 9, 9, 4, 7, 0, 3,\n",
      "        4, 1, 4, 4, 7, 5, 8, 1, 4, 8, 9, 1, 8, 6, 6, 4, 6, 8, 5, 7, 2, 3, 9, 2,\n",
      "        6, 2, 1, 2, 0, 8, 3, 8, 3, 0, 8, 7, 4, 9, 5, 0, 9, 7, 4, 9, 1, 6, 2, 7,\n",
      "        6, 1, 8, 6, 1, 0, 3, 6, 2, 1, 4, 0, 1, 2, 3, 4, 7, 8, 9, 0, 1, 2, 3, 4,\n",
      "        7, 8, 9, 0, 1, 2, 3, 4, 4, 6, 7, 8, 7, 4, 3, 1, 8, 6, 1, 9, 2, 4, 0, 9,\n",
      "        9, 3, 7, 7, 9, 1, 8, 4]))\n",
      "torch.return_types.max(\n",
      "values=tensor([6.2768, 2.0997, 5.0366, 2.1460, 6.1013, 7.5504, 7.7464, 7.6693, 2.4148,\n",
      "        6.1260, 7.0077, 8.6847, 6.6672, 3.3764, 5.0732, 8.0489, 6.0974, 8.1381,\n",
      "        4.2077, 5.2613, 4.7458, 5.4135, 6.6945, 5.5707, 5.2346, 2.3312, 5.3016,\n",
      "        6.1005, 5.3758, 6.1730, 6.1162, 6.1250, 5.4752, 6.5829, 7.3023, 4.6364,\n",
      "        6.4318, 6.5488, 3.5694, 4.4623, 2.5180, 5.9836, 6.6831, 4.2797, 6.7962,\n",
      "        2.5973, 3.2889, 5.1574, 4.4349, 6.1442, 6.6873, 4.3039, 6.7171, 6.7846,\n",
      "        8.5187, 8.3218, 4.9426, 6.8348, 6.4533, 5.0987, 8.9607, 5.1731, 5.0409,\n",
      "        6.1800, 7.5752, 5.8323, 6.7778, 8.0252, 5.2751, 7.2286, 5.5813, 5.9291,\n",
      "        4.0704, 4.2606, 6.7187, 5.0150, 4.8588, 7.5508, 6.1854, 6.9508, 4.0378,\n",
      "        6.0731, 3.2839, 7.1397, 6.9817, 4.2653, 5.5008, 6.4478, 4.7443, 8.9379,\n",
      "        4.6034, 5.2863, 3.2079, 6.8052, 6.8561, 4.6780, 4.8778, 5.5719, 8.6474,\n",
      "        8.6211, 6.1194, 5.2264, 4.4739, 5.4105, 4.0982, 4.4864, 4.5953, 4.3293,\n",
      "        2.7135, 3.9109, 7.5467, 4.4416, 4.7490, 3.4734, 3.9423, 6.5082, 6.4647,\n",
      "        4.7243, 5.7411, 5.8231, 6.4599, 6.3256, 5.1380, 6.0028, 6.1241, 5.7953,\n",
      "        3.9632, 4.2166]),\n",
      "indices=tensor([7, 4, 8, 5, 3, 2, 2, 0, 5, 8, 6, 0, 3, 8, 1, 0, 3, 0, 4, 7, 4, 9, 2, 9,\n",
      "        1, 2, 1, 7, 1, 6, 7, 3, 3, 6, 2, 8, 7, 6, 4, 9, 9, 8, 2, 9, 6, 5, 5, 9,\n",
      "        5, 3, 7, 4, 7, 6, 0, 0, 4, 6, 6, 9, 0, 1, 1, 3, 2, 1, 0, 0, 1, 2, 3, 4,\n",
      "        0, 4, 7, 8, 9, 0, 1, 2, 3, 4, 0, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8,\n",
      "        9, 4, 2, 0, 2, 1, 3, 9, 6, 3, 9, 3, 2, 0, 7, 1, 1, 0, 2, 0, 7, 9, 6, 1,\n",
      "        6, 7, 4, 9, 5, 7, 9, 8]))\n",
      "torch.return_types.max(\n",
      "values=tensor([2.8246, 7.1736, 7.9317, 5.8328, 3.6403, 4.5699, 7.8555, 8.2288, 4.4294,\n",
      "        5.8969, 4.6195, 5.9677, 5.5639, 3.2200, 5.5856, 7.5277, 6.2187, 5.0395,\n",
      "        4.6543, 3.9516, 5.0724, 6.7584, 5.3132, 4.6624, 6.0323, 8.9920, 5.4166,\n",
      "        4.4020, 7.9126, 8.8455, 6.5693, 4.8751, 4.4040, 8.4254, 8.3353, 5.4314,\n",
      "        5.0950, 6.7549, 6.0181, 4.8100, 4.8531, 2.9368, 4.3792, 5.6435, 4.5717,\n",
      "        5.4253, 4.8119, 5.5077, 7.7974, 5.1596, 4.8664, 7.5624, 6.0019, 5.2583,\n",
      "        4.8699, 5.5483, 7.2610, 4.9977, 5.3003, 6.0482, 6.2535, 4.1732, 5.6076,\n",
      "        7.3105, 3.3220, 5.0643, 3.9328, 3.7104, 6.1819, 6.8209, 3.5377, 3.2141,\n",
      "        9.1687, 3.2271, 4.1489, 3.0643, 6.3806, 5.8860, 3.9918, 2.7692, 7.7588,\n",
      "        3.9315, 4.9921, 4.1624, 4.4450, 3.9622, 5.3507, 2.9093, 7.0861, 4.9246,\n",
      "        6.8680, 6.1307, 5.9547, 4.0778, 6.4191, 5.3444, 3.1455, 7.4504, 2.5736,\n",
      "        4.7461, 6.2162, 7.1792, 5.8430, 7.3814, 6.6683, 2.6444, 5.3474, 5.3678,\n",
      "        4.9765, 2.9067, 6.4455, 5.5054, 5.5550, 5.0418, 4.2045, 9.4483, 3.9852,\n",
      "        2.5677, 6.1171, 2.4650, 9.0093, 8.7091, 5.3312, 2.7590, 4.0641, 1.9025,\n",
      "        9.3081, 3.2024]),\n",
      "indices=tensor([5, 6, 2, 4, 8, 9, 2, 2, 8, 0, 6, 4, 3, 3, 1, 2, 4, 1, 3, 8, 9, 6, 9, 3,\n",
      "        4, 0, 3, 9, 0, 2, 7, 1, 1, 0, 7, 6, 2, 2, 7, 6, 0, 2, 9, 4, 8, 4, 3, 3,\n",
      "        7, 8, 1, 0, 4, 5, 8, 2, 0, 6, 8, 2, 7, 8, 5, 7, 8, 2, 3, 4, 6, 7, 5, 5,\n",
      "        0, 1, 2, 5, 6, 7, 5, 9, 0, 1, 2, 3, 4, 5, 6, 5, 7, 5, 7, 3, 3, 5, 6, 5,\n",
      "        4, 0, 5, 3, 2, 2, 3, 0, 6, 4, 3, 7, 6, 9, 2, 2, 3, 5, 5, 0, 7, 3, 3, 4,\n",
      "        0, 0, 5, 8, 8, 8, 0, 5]))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.return_types.max(\n",
      "values=tensor([ 3.6398,  8.0794,  4.9305,  7.5241,  6.2051,  4.3312,  5.5614,  4.3298,\n",
      "         4.6029, 10.8288,  2.6214,  8.8654,  6.1187,  5.5622,  5.7475,  7.0811,\n",
      "         5.0217,  4.5889,  3.9517, 10.1689,  4.8615,  8.5020,  7.2206,  4.5441,\n",
      "         5.2422,  9.3201,  4.7370,  5.3791,  9.8957,  5.8160,  8.8488,  6.7530,\n",
      "         5.0537,  2.6251,  8.6919,  8.8723,  4.1323,  3.6980,  4.1936,  3.5595,\n",
      "         7.0430,  6.3800,  3.1706,  6.2836,  6.8247,  9.1601,  3.1604,  4.9535,\n",
      "         7.2033,  3.9841,  6.7057,  5.0229,  9.5918,  6.9247,  7.5631,  4.6192,\n",
      "         3.0616,  2.4621,  4.1858,  4.7457,  5.1007,  7.5644,  5.8240,  8.0254,\n",
      "         8.3112,  6.7112,  8.2516,  6.5990,  8.1978,  4.8496,  4.2326, 10.1234,\n",
      "         4.9951,  7.7102,  3.3584,  5.2668,  5.4790,  6.6494,  7.3252,  4.9848,\n",
      "         7.9171,  7.4300,  5.5850,  4.0695,  6.6219,  4.6351,  6.0674,  9.0975,\n",
      "         5.9817,  2.8057,  6.1656,  8.5019,  6.0573,  8.7831,  5.2558, 11.3730,\n",
      "         5.0692,  8.7748,  8.3098,  6.6660,  9.4107,  8.5877,  3.2949,  5.6878,\n",
      "         9.2158,  4.3352, 11.6369,  6.4519, 11.7273,  8.0649,  6.0490,  5.5851,\n",
      "         7.7638,  9.6419,  6.0874,  5.4678,  3.4048,  7.2964,  8.5534,  7.1245,\n",
      "         5.4331,  5.6391,  4.2273,  5.0061,  2.8252, 10.0931,  8.3446,  6.9149]),\n",
      "indices=tensor([5, 6, 5, 6, 7, 5, 3, 5, 3, 0, 8, 2, 3, 4, 5, 6, 7, 4, 9, 0, 1, 2, 3, 9,\n",
      "        5, 6, 9, 9, 0, 1, 2, 3, 4, 8, 6, 7, 5, 9, 1, 3, 5, 9, 9, 1, 7, 7, 6, 1,\n",
      "        4, 8, 3, 0, 2, 9, 3, 6, 8, 8, 8, 8, 9, 7, 5, 4, 3, 9, 2, 5, 7, 4, 1, 2,\n",
      "        3, 6, 0, 1, 0, 0, 2, 5, 7, 2, 5, 1, 1, 8, 3, 6, 4, 0, 4, 7, 3, 6, 8, 0,\n",
      "        2, 7, 6, 9, 2, 6, 5, 2, 6, 9, 0, 4, 0, 6, 1, 4, 2, 0, 4, 5, 1, 3, 7, 6,\n",
      "        9, 4, 8, 3, 9, 7, 6, 3]))\n",
      "torch.return_types.max(\n",
      "values=tensor([11.4706,  6.2578,  9.7136,  7.7538,  4.7331,  9.1752,  6.2367,  6.6137,\n",
      "         6.0498,  5.5512,  5.8760,  6.5844,  6.6842,  5.5568,  4.0474,  9.9923,\n",
      "         5.7926,  8.5352,  5.7323,  4.2370,  2.7239,  6.8211,  5.7748,  4.5861,\n",
      "         4.8712,  6.3896,  5.7778,  6.7208,  5.2898,  5.8759,  4.2459,  7.5198,\n",
      "         7.1049,  4.5703,  4.6238,  4.2816,  6.1214,  4.0071,  7.2578,  5.1916,\n",
      "         6.0123,  5.9150,  5.1288,  5.4961,  4.1151,  5.5640,  4.7552,  5.1334,\n",
      "         5.3083,  5.2308,  5.9238,  5.0315,  5.0217,  3.4657,  4.5703,  5.4860,\n",
      "         4.5571,  5.5854,  5.7035,  5.8740,  3.6249,  5.4317,  4.8264,  4.1211,\n",
      "         6.4413,  7.4804,  3.8572,  5.5297,  5.0688,  9.8298,  4.4805,  4.1773,\n",
      "         3.2204,  5.2651,  3.6896,  6.8517,  5.8193,  5.5011,  4.0511,  5.0637,\n",
      "         3.9148,  3.1966,  6.4325,  7.3032,  6.6417,  6.3420,  7.5540,  5.4584,\n",
      "         5.5170,  6.4875,  3.9654,  3.1923,  5.2449,  4.3591,  4.7207,  5.5536,\n",
      "         3.9009,  5.3326,  6.4224,  5.0685,  5.2539,  5.6320,  3.8585,  6.7151,\n",
      "         4.4628,  6.6782,  5.6691,  5.8228,  4.4307,  3.2993,  4.9882,  6.0963,\n",
      "         2.9802,  6.6137,  5.1778,  5.4747,  3.8501,  6.1834,  3.9584,  6.1228,\n",
      "         7.0820,  4.2347,  4.9517,  6.9778,  5.5400,  6.5400,  5.5115,  5.3006]),\n",
      "indices=tensor([0, 3, 6, 2, 2, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 3, 6, 7, 8,\n",
      "        9, 0, 1, 2, 3, 4, 3, 6, 7, 8, 9, 5, 6, 6, 0, 8, 3, 7, 9, 4, 7, 1, 9, 1,\n",
      "        7, 1, 4, 1, 7, 5, 7, 1, 3, 3, 1, 6, 9, 7, 4, 3, 0, 2, 5, 2, 6, 0, 8, 4,\n",
      "        8, 1, 5, 0, 6, 6, 3, 4, 7, 5, 7, 2, 2, 0, 0, 1, 7, 7, 4, 5, 9, 8, 9, 6,\n",
      "        8, 3, 6, 1, 2, 9, 5, 2, 5, 2, 6, 2, 4, 8, 4, 6, 5, 0, 1, 2, 3, 4, 5, 6,\n",
      "        7, 8, 9, 0, 1, 2, 8, 4]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 3.9178,  6.9712,  4.4763,  6.2104,  4.0843,  6.7312,  4.8304,  4.8256,\n",
      "         5.3779,  4.5562,  6.6049,  6.3515,  5.8927,  4.0167,  5.3799,  4.5052,\n",
      "         4.9534,  6.0454,  3.0076,  4.4025,  4.5369,  8.7140,  4.7445,  3.2376,\n",
      "         4.8514,  5.7574,  2.9441,  5.5230,  4.6058,  4.0659,  5.0603,  3.5446,\n",
      "         2.8318,  3.9140,  4.1513,  3.4150,  2.7936,  3.8839,  5.5043,  7.6299,\n",
      "         4.3825,  4.9645,  6.1359,  6.8439,  3.8022,  4.3885,  5.5668,  4.7774,\n",
      "         5.6669,  4.6253,  4.6240,  4.6625,  4.0305,  2.4983,  3.1153,  8.6946,\n",
      "         5.3864,  3.8942,  3.4546,  8.4658,  3.7434,  5.1024,  1.5320,  3.7912,\n",
      "         5.0171,  6.9241,  5.4695,  5.7722,  4.2429,  6.2551,  3.6868,  5.3568,\n",
      "         8.2183,  7.9300,  4.0041,  9.4421,  4.2872,  4.7206,  3.4028,  3.3107,\n",
      "         7.3806,  2.5247,  5.6361,  4.0517,  8.3266,  4.7262,  5.2624,  6.0045,\n",
      "         4.0859,  8.8991,  6.4710,  6.2023,  5.9267,  5.8471,  4.9374,  5.5730,\n",
      "        10.3864,  5.9667,  3.9133,  7.7953,  5.9698,  5.4668,  6.3103,  7.6660,\n",
      "         9.6219,  5.7894,  5.0790,  7.4583,  2.9595,  7.3393,  4.9269,  3.7752,\n",
      "         5.3643,  5.6380,  3.6094,  6.3567,  3.2258,  6.3047,  2.5495,  3.6569,\n",
      "         3.3495,  5.2434,  2.5023,  6.9817,  4.7450,  5.0987,  4.1795,  6.4522]),\n",
      "indices=tensor([5, 6, 7, 8, 9, 0, 1, 2, 4, 5, 6, 7, 8, 0, 4, 0, 1, 7, 5, 1, 4, 2, 8, 4,\n",
      "        3, 1, 7, 8, 2, 4, 3, 3, 6, 9, 4, 5, 8, 6, 7, 0, 6, 2, 6, 3, 9, 1, 7, 4,\n",
      "        8, 8, 9, 0, 3, 9, 5, 2, 9, 4, 8, 0, 2, 7, 3, 1, 7, 7, 8, 2, 9, 5, 5, 1,\n",
      "        2, 6, 4, 2, 5, 2, 3, 6, 0, 2, 7, 5, 2, 8, 1, 6, 1, 0, 4, 3, 1, 6, 1, 9,\n",
      "        0, 1, 6, 3, 4, 6, 6, 7, 0, 1, 2, 3, 4, 6, 7, 1, 0, 1, 2, 3, 9, 7, 1, 0,\n",
      "        0, 2, 4, 0, 7, 3, 2, 4]))\n",
      "torch.return_types.max(\n",
      "values=tensor([3.7648, 5.8986, 5.3544, 5.2255, 5.5664, 8.2062, 2.2881, 4.1106, 8.6339,\n",
      "        2.4114, 5.3180, 6.0343, 6.7835, 4.6084, 7.5255, 2.7570, 4.4857, 6.8385,\n",
      "        5.6155, 2.1326, 6.1229, 4.5905, 4.5189, 3.2245, 6.6399, 2.8622, 7.2315,\n",
      "        7.7115, 4.8997, 2.8048, 6.7868, 3.2495, 4.8560, 6.2819, 5.7559, 3.4813,\n",
      "        3.5304, 4.3049, 2.3180, 4.1098, 5.1479, 4.8213, 4.9656, 5.0264, 4.8246,\n",
      "        3.8423, 6.1508, 5.8372, 3.7074, 4.3833, 4.0506, 5.9490, 3.1183, 4.2241,\n",
      "        4.3276, 3.1839, 4.0086, 7.1017, 6.4851, 6.5159, 6.3770, 4.4857, 5.2888,\n",
      "        8.1309, 6.0820, 3.7271, 3.9641, 8.8909, 6.0096, 3.5644, 6.1675, 4.8688,\n",
      "        5.4418, 7.9306, 6.3794, 5.9789, 4.7109, 8.3160, 6.2227, 6.7583, 5.8076,\n",
      "        6.5463, 2.3727, 5.6449, 7.3199, 4.6791, 2.9917, 5.7042, 7.2624, 4.1867,\n",
      "        7.1920, 6.9974, 6.4783, 5.7763, 4.8743, 3.0969, 6.8655, 4.3211, 6.7340,\n",
      "        5.9276, 6.1163, 5.5614, 4.2834, 7.9408, 5.8534, 5.4419, 3.9603, 6.1177,\n",
      "        6.1820, 5.5491, 4.8093, 6.2290, 7.9219, 5.7249, 7.9589, 7.7745, 4.3174,\n",
      "        6.7001, 3.4450, 7.1356, 6.4559, 4.9175, 4.4855, 7.6283, 4.5727, 7.5910,\n",
      "        5.6511, 7.4926]),\n",
      "indices=tensor([1, 8, 0, 6, 2, 7, 4, 2, 6, 6, 1, 7, 7, 9, 2, 4, 6, 7, 7, 2, 9, 9, 1, 8,\n",
      "        6, 4, 6, 0, 9, 2, 6, 4, 3, 9, 0, 8, 8, 9, 8, 7, 1, 3, 6, 9, 4, 1, 7, 6,\n",
      "        9, 3, 8, 7, 4, 1, 9, 8, 0, 6, 0, 1, 2, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4,\n",
      "        5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 3, 2, 9, 3, 2, 1, 4, 5, 5,\n",
      "        2, 3, 2, 1, 3, 9, 7, 2, 1, 2, 8, 9, 1, 8, 8, 7, 0, 6, 7, 7, 8, 7, 5, 0,\n",
      "        6, 1, 5, 7, 4, 6, 1, 2]))\n",
      "torch.return_types.max(\n",
      "values=tensor([ 6.7675,  3.2806,  5.3494,  8.1725,  6.2506,  4.8757,  5.7565,  6.1149,\n",
      "         4.8779,  4.8069,  8.2494,  4.5170, 10.9163, 10.5964,  6.2890,  6.9797,\n",
      "         6.4722,  7.6397,  7.1504,  7.2480,  7.7899,  7.7808, 10.0386,  5.9632,\n",
      "         5.1142,  5.2337,  4.4203,  5.0169,  4.5712,  8.4155,  5.7689,  3.7124,\n",
      "         5.2212,  4.4079,  5.5131,  4.9044,  8.0622,  5.6014,  6.9973,  8.8784,\n",
      "         6.4931,  8.0218,  7.7385,  5.4975,  3.0959,  7.1820,  4.2890,  6.8650,\n",
      "         5.4755,  4.2161,  2.9613,  4.5040,  4.8515,  3.5771,  4.1341,  7.0198,\n",
      "         3.0173,  3.6550,  6.5204,  6.0706,  3.3594,  4.0614,  3.3429,  3.1800,\n",
      "         4.6850,  3.0968,  3.9333,  1.5584,  5.7389,  7.0841,  3.5643,  2.7375,\n",
      "         2.0181,  6.7936,  3.7484,  2.5134,  2.2249,  4.1056,  1.4285,  6.0845,\n",
      "         5.1878,  6.0738,  5.7009,  2.4930,  4.2975,  2.4820,  3.9585,  4.9222,\n",
      "         3.6319,  3.0332,  4.1925,  2.9429,  2.9171,  4.3744,  3.2851,  3.9978,\n",
      "         5.0996,  4.4630,  3.3939,  5.1254,  1.5407,  2.4334,  4.9081,  5.9165,\n",
      "         1.5642,  4.6573,  4.4492,  4.9891,  2.5763,  3.7637,  6.8902,  4.8582,\n",
      "         2.5995,  2.9015,  6.8991,  6.4828,  6.9875,  4.5801,  3.1669,  3.1484,\n",
      "         6.5404,  5.3396,  7.4176,  4.5544,  4.0095,  6.2261,  3.2442,  3.8558]),\n",
      "indices=tensor([7, 9, 9, 0, 3, 8, 4, 4, 1, 8, 6, 5, 0, 0, 3, 7, 1, 6, 4, 2, 6, 6, 0, 4,\n",
      "        5, 4, 1, 3, 8, 6, 3, 9, 9, 5, 9, 3, 6, 4, 7, 6, 2, 2, 0, 9, 4, 0, 1, 2,\n",
      "        3, 4, 5, 6, 7, 1, 9, 0, 8, 2, 3, 7, 8, 7, 0, 8, 2, 3, 4, 5, 6, 7, 8, 9,\n",
      "        2, 0, 3, 4, 1, 4, 7, 7, 8, 7, 7, 9, 0, 4, 7, 4, 0, 5, 8, 5, 7, 8, 8, 4,\n",
      "        0, 7, 1, 3, 5, 3, 1, 6, 1, 3, 8, 7, 3, 1, 6, 8, 5, 9, 2, 2, 0, 9, 6, 4,\n",
      "        6, 7, 3, 1, 3, 6, 6, 2]))\n",
      "torch.return_types.max(\n",
      "values=tensor([3.8702, 6.3511, 4.8565, 7.2387, 4.1062, 3.7832, 3.5222, 4.5643, 2.8368,\n",
      "        2.1835, 3.4638, 5.0203, 6.2026, 3.9834, 3.7608, 2.5558]),\n",
      "indices=tensor([1, 2, 6, 0, 7, 8, 9, 2, 7, 5, 1, 8, 3, 5, 6, 8]))\n"
     ]
    }
   ],
   "source": [
    "for x,y in valid_dl:\n",
    "    ouputs=model(x)\n",
    "    print(torch.max(ouputs.data,1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# y=valid_dl[1]\n",
    "# print(y.size(0))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 准确率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy:87%\n"
     ]
    }
   ],
   "source": [
    "correct=0\n",
    "total=0\n",
    "for x,y in valid_dl:\n",
    "    outputs=model(x)\n",
    "    _,pred=torch.max(outputs.data,1)\n",
    "    total+=y.size(0)\n",
    "    correct+=(pred==y).sum().item()\n",
    "print(\"Accuracy:%d%%\"%(100*correct/total))    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#没用GPU\n",
    "torch.cuda.is_available()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(tensor([1, 2, 6, 0, 7, 8, 9, 2, 7, 5, 1, 8, 3, 5, 6, 8]),\n",
       " tensor([1, 2, 6, 0, 7, 8, 9, 2, 9, 5, 1, 8, 3, 5, 6, 8]),\n",
       " tensor([[0., 0., 0.,  ..., 0., 0., 0.],\n",
       "         [0., 0., 0.,  ..., 0., 0., 0.],\n",
       "         [0., 0., 0.,  ..., 0., 0., 0.],\n",
       "         ...,\n",
       "         [0., 0., 0.,  ..., 0., 0., 0.],\n",
       "         [0., 0., 0.,  ..., 0., 0., 0.],\n",
       "         [0., 0., 0.,  ..., 0., 0., 0.]]))"
      ]
     },
     "execution_count": 115,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pred,y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "16"
      ]
     },
     "execution_count": 110,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "x.shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaEAAAGdCAYAAAC7EMwUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAZO0lEQVR4nO3df2zU953n8ddgYELQeLQu2DMujuvLwrXCiFOBABY/DFu8uBsuxKlEklVltC0XGoPOcqJcKX9g9Q+co4eXrdxQNdeloEJBeyIECRTiHtgEEVoHEcWiOc45THGKZx2sZMY4dIzhc394me1gx+RrZnh77OdD+krMd74ffz988xXPfD0z3/E555wAADAwwXoCAIDxiwgBAMwQIQCAGSIEADBDhAAAZogQAMAMEQIAmCFCAAAzE60ncK87d+7o2rVrCgQC8vl81tMBAHjknFNPT4/y8/M1YcLw1zqjLkLXrl1TQUGB9TQAAA+oo6NDM2bMGHabURehQCAgSVqib2uiJhnPBgDgVb9u6YyOJ/49H07aIvTaa6/pJz/5iTo7OzV79mzt2rVLS5cuve+4u7+Cm6hJmugjQgCQcf7tjqRf5iWVtLwx4dChQ6qurtbWrVt14cIFLV26VOXl5bp69Wo6dgcAyFBpiVB9fb2+973v6fvf/76+8Y1vaNeuXSooKNDu3bvTsTsAQIZKeYT6+vp0/vx5lZWVJa0vKyvT2bNnB20fj8cVi8WSFgDA+JDyCF2/fl23b99WXl5e0vq8vDxFIpFB29fV1SkYDCYW3hkHAONH2j6seu8LUs65IV+k2rJli6LRaGLp6OhI15QAAKNMyt8dN23aNGVlZQ266unq6hp0dSRJfr9ffr8/1dMAAGSAlF8JTZ48WfPmzVNjY2PS+sbGRpWUlKR6dwCADJaWzwnV1NTou9/9rubPn6/FixfrF7/4ha5evaqNGzemY3cAgAyVlgitW7dO3d3d+vGPf6zOzk4VFxfr+PHjKiwsTMfuAAAZyuecc9aT+EuxWEzBYFCleoo7JgBABup3t9SkNxWNRpWdnT3stnyVAwDADBECAJghQgAAM0QIAGCGCAEAzBAhAIAZIgQAMEOEAABmiBAAwAwRAgCYIUIAADNECABghggBAMwQIQCAGSIEADBDhAAAZogQAMAMEQIAmCFCAAAzRAgAYIYIAQDMECEAgBkiBAAwQ4QAAGaIEADADBECAJghQgAAM0QIAGCGCAEAzBAhAIAZIgQAMEOEAABmiBAAwAwRAgCYIUIAADNECABghggBAMwQIQCAGSIEADBDhAAAZogQAMAMEQIAmCFCAAAzRAgAYIYIAQDMECEAgBkiBAAwQ4QAAGaIEADADBECAJghQgAAM0QIAGBmovUEAMCLvr+d73nMttf+eUT7ernuBc9jvvI/3x3RvsYrroQAAGaIEADATMojVFtbK5/Pl7SEQqFU7wYAMAak5TWh2bNn67e//W3icVZWVjp2AwDIcGmJ0MSJE7n6AQDcV1peE2pra1N+fr6Kior07LPP6vLly1+4bTweVywWS1oAAONDyiO0cOFC7du3TydOnNDrr7+uSCSikpISdXd3D7l9XV2dgsFgYikoKEj1lAAAo1TKI1ReXq5nnnlGc+bM0be+9S0dO3ZMkrR3794ht9+yZYui0Whi6ejoSPWUAACjVNo/rDp16lTNmTNHbW1tQz7v9/vl9/vTPQ0AwCiU9s8JxeNxffjhhwqHw+neFQAgw6Q8Qi+//LKam5vV3t6u3/3ud/rOd76jWCymysrKVO8KAJDhUv7ruI8//ljPPfecrl+/runTp2vRokU6d+6cCgsLU70rAECGS3mEDh48mOofCWCMyvqrv/I8JvL9uOcxfz1pZB/9mP5e1POYOyPa0/jFveMAAGaIEADADBECAJghQgAAM0QIAGCGCAEAzBAhAIAZIgQAMEOEAABmiBAAwAwRAgCYIUIAADNp/1I7AOOEz+d5yM0nHvc85uTCXZ7H/Lc/fdvzGEm68/4fRjQOXx5XQgAAM0QIAGCGCAEAzBAhAIAZIgQAMEOEAABmiBAAwAwRAgCYIUIAADNECABghggBAMwQIQCAGSIEADDDXbQBpERvxROexzT/dLfnMZuvfcvzmO6KRz2PGRAb4Th8WVwJAQDMECEAgBkiBAAwQ4QAAGaIEADADBECAJghQgAAM0QIAGCGCAEAzBAhAIAZIgQAMEOEAABmuIEpMIZlfSVnROO6v/0fPY/533X/6HnMxo//xvOYPz3p/Waktz+JeB6Dh4MrIQCAGSIEADBDhAAAZogQAMAMEQIAmCFCAAAzRAgAYIYIAQDMECEAgBkiBAAwQ4QAAGaIEADADDcwBcawS/9UOKJx/3fFzzyP+U+//wfPYwo2Xvc85vYnXZ7HYPTiSggAYIYIAQDMeI7Q6dOntWbNGuXn58vn8+nIkSNJzzvnVFtbq/z8fE2ZMkWlpaW6ePFiquYLABhDPEeot7dXc+fOVUNDw5DP79ixQ/X19WpoaFBLS4tCoZBWrVqlnp6eB54sAGBs8fzGhPLycpWXlw/5nHNOu3bt0tatW1VRUSFJ2rt3r/Ly8nTgwAG98MILDzZbAMCYktLXhNrb2xWJRFRWVpZY5/f7tXz5cp09e3bIMfF4XLFYLGkBAIwPKY1QJDLwPe55eXlJ6/Py8hLP3auurk7BYDCxFBQUpHJKAIBRLC3vjvP5fEmPnXOD1t21ZcsWRaPRxNLR0ZGOKQEARqGUflg1FApJGrgiCofDifVdXV2Dro7u8vv98vv9qZwGACBDpPRKqKioSKFQSI2NjYl1fX19am5uVklJSSp3BQAYAzxfCd24cUMfffRR4nF7e7vef/995eTk6LHHHlN1dbW2b9+umTNnaubMmdq+fbseffRRPf/88ymdOAAg83mO0HvvvacVK1YkHtfU1EiSKisr9atf/UqvvPKKbt68qRdffFGffvqpFi5cqLfffluBQCB1swYAjAk+55yznsRfisViCgaDKtVTmuibZD0dYNS49rL3X2m31rw2on3NfvfvPY/5WpX3m5H2R/7V8xiMfv3ulpr0pqLRqLKzs4fdlnvHAQDMECEAgBkiBAAwQ4QAAGaIEADADBECAJghQgAAM0QIAGCGCAEAzBAhAIAZIgQAMEOEAABmiBAAwExKv1kVwJfz8Rbvd8RuqdrlecyGjhX332gIhRu7PI/p/+STEe0L4xtXQgAAM0QIAGCGCAEAzBAhAIAZIgQAMEOEAABmiBAAwAwRAgCYIUIAADNECABghggBAMwQIQCAGW5gCjyg+N8t8DzmzIv/w/OYVzq934z0T3/3iOcxknT7OjcjxcPBlRAAwAwRAgCYIUIAADNECABghggBAMwQIQCAGSIEADBDhAAAZogQAMAMEQIAmCFCAAAzRAgAYIYbmAIPaGP9//I8psfd8TymrWqW5zG63up9DPAQcSUEADBDhAAAZogQAMAMEQIAmCFCAAAzRAgAYIYIAQDMECEAgBkiBAAwQ4QAAGaIEADADBECAJjhBqbAX/h0/WLPY/7z1N97HjP7rWrPY2b9/j3PY4DRjishAIAZIgQAMOM5QqdPn9aaNWuUn58vn8+nI0eOJD2/fv16+Xy+pGXRokWpmi8AYAzxHKHe3l7NnTtXDQ0NX7jN6tWr1dnZmViOHz/+QJMEAIxNnt+YUF5ervLy8mG38fv9CoVCI54UAGB8SMtrQk1NTcrNzdWsWbO0YcMGdXV1feG28XhcsVgsaQEAjA8pj1B5ebn279+vkydPaufOnWppadHKlSsVj8eH3L6urk7BYDCxFBQUpHpKAIBRKuWfE1q3bl3iz8XFxZo/f74KCwt17NgxVVRUDNp+y5YtqqmpSTyOxWKECADGibR/WDUcDquwsFBtbW1DPu/3++X3+9M9DQDAKJT2zwl1d3ero6ND4XA43bsCAGQYz1dCN27c0EcffZR43N7ervfff185OTnKyclRbW2tnnnmGYXDYV25ckU/+tGPNG3aND399NMpnTgAIPN5jtB7772nFStWJB7ffT2nsrJSu3fvVmtrq/bt26fPPvtM4XBYK1as0KFDhxQIBFI3awDAmOA5QqWlpXLOfeHzJ06ceKAJAangmziylztn/ZcPPY+J3unzPGZq22TPY4CxiHvHAQDMECEAgBkiBAAwQ4QAAGaIEADADBECAJghQgAAM0QIAGCGCAEAzBAhAIAZIgQAMEOEAABmiBAAwEzav1kVeGATsjwP+fzJb45oV3sLf+55zDfeedHzmKL/ftbzGGAs4koIAGCGCAEAzBAhAIAZIgQAMEOEAABmiBAAwAwRAgCYIUIAADNECABghggBAMwQIQCAGSIEADDDDUwx6mVN/4rnMf91x8E0zGRoX/up76HtCxhruBICAJghQgAAM0QIAGCGCAEAzBAhAIAZIgQAMEOEAABmiBAAwAwRAgCYIUIAADNECABghggBAMxwA1OMev2Phz2P+UrWjRHt628uVnge80jLh57HOM8jgLGJKyEAgBkiBAAwQ4QAAGaIEADADBECAJghQgAAM0QIAGCGCAEAzBAhAIAZIgQAMEOEAABmiBAAwAw3MMVDNeGRRzyPmfLqNc9jCifGPI+RJF/9dM9j3K0rI9oXAK6EAACGiBAAwIynCNXV1WnBggUKBALKzc3V2rVrdenSpaRtnHOqra1Vfn6+pkyZotLSUl28eDGlkwYAjA2eItTc3KyqqiqdO3dOjY2N6u/vV1lZmXp7exPb7NixQ/X19WpoaFBLS4tCoZBWrVqlnp6elE8eAJDZPL0x4a233kp6vGfPHuXm5ur8+fNatmyZnHPatWuXtm7dqoqKgW+o3Lt3r/Ly8nTgwAG98MILqZs5ACDjPdBrQtFoVJKUk5MjSWpvb1ckElFZWVliG7/fr+XLl+vs2bND/ox4PK5YLJa0AADGhxFHyDmnmpoaLVmyRMXFxZKkSCQiScrLy0vaNi8vL/Hcverq6hQMBhNLQUHBSKcEAMgwI47Qpk2b9MEHH+g3v/nNoOd8Pl/SY+fcoHV3bdmyRdFoNLF0dHSMdEoAgAwzog+rbt68WUePHtXp06c1Y8aMxPpQKCRp4IooHA4n1nd1dQ26OrrL7/fL7/ePZBoAgAzn6UrIOadNmzbp8OHDOnnypIqKipKeLyoqUigUUmNjY2JdX1+fmpubVVJSkpoZAwDGDE9XQlVVVTpw4IDefPNNBQKBxOs8wWBQU6ZMkc/nU3V1tbZv366ZM2dq5syZ2r59ux599FE9//zzafkLAAAyl6cI7d69W5JUWlqatH7Pnj1av369JOmVV17RzZs39eKLL+rTTz/VwoUL9fbbbysQCKRkwgCAscPnnHPWk/hLsVhMwWBQpXpKE32TrKeDFJv4tcc8j/lp8wHPY5785Suex0jSYz8e+qMEAL68fndLTXpT0WhU2dnZw27LveMAAGaIEADADBECAJghQgAAM0QIAGCGCAEAzBAhAIAZIgQAMEOEAABmiBAAwAwRAgCYIUIAADNECABgZkTfrAqM1P+pzvc85rM7kz2PKfqXTzyPkaTbIxoFYKS4EgIAmCFCAAAzRAgAYIYIAQDMECEAgBkiBAAwQ4QAAGaIEADADBECAJghQgAAM0QIAGCGCAEAzHADU4yYb5L3G4tWLPud5zG9zvt+fH/u8zwGwMPHlRAAwAwRAgCYIUIAADNECABghggBAMwQIQCAGSIEADBDhAAAZogQAMAMEQIAmCFCAAAzRAgAYIYbmGLE3C3vNwl9J/LXnsec+df/4HlMdvv/8zwGwMPHlRAAwAwRAgCYIUIAADNECABghggBAMwQIQCAGSIEADBDhAAAZogQAMAMEQIAmCFCAAAzRAgAYIYbmOKhCn77I+spABhFuBICAJghQgAAM54iVFdXpwULFigQCCg3N1dr167VpUuXkrZZv369fD5f0rJo0aKUThoAMDZ4ilBzc7Oqqqp07tw5NTY2qr+/X2VlZert7U3abvXq1ers7Ewsx48fT+mkAQBjg6c3Jrz11ltJj/fs2aPc3FydP39ey5YtS6z3+/0KhUKpmSEAYMx6oNeEotGoJCknJydpfVNTk3JzczVr1ixt2LBBXV1dX/gz4vG4YrFY0gIAGB9GHCHnnGpqarRkyRIVFxcn1peXl2v//v06efKkdu7cqZaWFq1cuVLxeHzIn1NXV6dgMJhYCgoKRjolAECG8Tnn3EgGVlVV6dixYzpz5oxmzJjxhdt1dnaqsLBQBw8eVEVFxaDn4/F4UqBisZgKCgpUqqc00TdpJFMDABjqd7fUpDcVjUaVnZ097LYj+rDq5s2bdfToUZ0+fXrYAElSOBxWYWGh2trahnze7/fL7/ePZBoAgAznKULOOW3evFlvvPGGmpqaVFRUdN8x3d3d6ujoUDgcHvEkAQBjk6fXhKqqqvTrX/9aBw4cUCAQUCQSUSQS0c2bNyVJN27c0Msvv6x3331XV65cUVNTk9asWaNp06bp6aefTstfAACQuTxdCe3evVuSVFpamrR+z549Wr9+vbKystTa2qp9+/bps88+Uzgc1ooVK3To0CEFAoGUTRoAMDZ4/nXccKZMmaITJ0480IQAAOMH944DAJghQgAAM0QIAGCGCAEAzBAhAIAZIgQAMEOEAABmiBAAwAwRAgCYIUIAADNECABghggBAMwQIQCAGSIEADBDhAAAZogQAMAMEQIAmCFCAAAzRAgAYIYIAQDMECEAgBkiBAAwQ4QAAGaIEADADBECAJiZaD2BeznnJEn9uiU548kAADzr1y1J//7v+XBGXYR6enokSWd03HgmAIAH0dPTo2AwOOw2PvdlUvUQ3blzR9euXVMgEJDP50t6LhaLqaCgQB0dHcrOzjaaoT2OwwCOwwCOwwCOw4DRcBycc+rp6VF+fr4mTBj+VZ9RdyU0YcIEzZgxY9htsrOzx/VJdhfHYQDHYQDHYQDHYYD1cbjfFdBdvDEBAGCGCAEAzGRUhPx+v7Zt2ya/3289FVMchwEchwEchwEchwGZdhxG3RsTAADjR0ZdCQEAxhYiBAAwQ4QAAGaIEADATEZF6LXXXlNRUZEeeeQRzZs3T++88471lB6q2tpa+Xy+pCUUCllPK+1Onz6tNWvWKD8/Xz6fT0eOHEl63jmn2tpa5efna8qUKSotLdXFixdtJptG9zsO69evH3R+LFq0yGayaVJXV6cFCxYoEAgoNzdXa9eu1aVLl5K2GQ/nw5c5DplyPmRMhA4dOqTq6mpt3bpVFy5c0NKlS1VeXq6rV69aT+2hmj17tjo7OxNLa2ur9ZTSrre3V3PnzlVDQ8OQz+/YsUP19fVqaGhQS0uLQqGQVq1albgP4Vhxv+MgSatXr046P44fH1v3YGxublZVVZXOnTunxsZG9ff3q6ysTL29vYltxsP58GWOg5Qh54PLEE888YTbuHFj0rqvf/3r7oc//KHRjB6+bdu2ublz51pPw5Qk98YbbyQe37lzx4VCIffqq68m1v35z392wWDQ/fznPzeY4cNx73FwzrnKykr31FNPmczHSldXl5PkmpubnXPj93y49zg4lznnQ0ZcCfX19en8+fMqKytLWl9WVqazZ88azcpGW1ub8vPzVVRUpGeffVaXL1+2npKp9vZ2RSKRpHPD7/dr+fLl4+7ckKSmpibl5uZq1qxZ2rBhg7q6uqynlFbRaFSSlJOTI2n8ng/3Hoe7MuF8yIgIXb9+Xbdv31ZeXl7S+ry8PEUiEaNZPXwLFy7Uvn37dOLECb3++uuKRCIqKSlRd3e39dTM3P3vP97PDUkqLy/X/v37dfLkSe3cuVMtLS1auXKl4vG49dTSwjmnmpoaLVmyRMXFxZLG5/kw1HGQMud8GHV30R7OvV/t4JwbtG4sKy8vT/x5zpw5Wrx4sR5//HHt3btXNTU1hjOzN97PDUlat25d4s/FxcWaP3++CgsLdezYMVVUVBjOLD02bdqkDz74QGfOnBn03Hg6H77oOGTK+ZARV0LTpk1TVlbWoP+T6erqGvR/POPJ1KlTNWfOHLW1tVlPxczddwdybgwWDodVWFg4Js+PzZs36+jRozp16lTSV7+Mt/Phi47DUEbr+ZAREZo8ebLmzZunxsbGpPWNjY0qKSkxmpW9eDyuDz/8UOFw2HoqZoqKihQKhZLOjb6+PjU3N4/rc0OSuru71dHRMabOD+ecNm3apMOHD+vkyZMqKipKen68nA/3Ow5DGbXng+GbIjw5ePCgmzRpkvvlL3/p/vCHP7jq6mo3depUd+XKFeupPTQvvfSSa2pqcpcvX3bnzp1zTz75pAsEAmP+GPT09LgLFy64CxcuOEmuvr7eXbhwwf3xj390zjn36quvumAw6A4fPuxaW1vdc88958LhsIvFYsYzT63hjkNPT4976aWX3NmzZ117e7s7deqUW7x4sfvqV786po7DD37wAxcMBl1TU5Pr7OxMLJ9//nlim/FwPtzvOGTS+ZAxEXLOuZ/97GeusLDQTZ482X3zm99MejvieLBu3ToXDofdpEmTXH5+vquoqHAXL160nlbanTp1ykkatFRWVjrnBt6Wu23bNhcKhZzf73fLli1zra2ttpNOg+GOw+eff+7Kysrc9OnT3aRJk9xjjz3mKisr3dWrV62nnVJD/f0luT179iS2GQ/nw/2OQyadD3yVAwDATEa8JgQAGJuIEADADBECAJghQgAAM0QIAGCGCAEAzBAhAIAZIgQAMEOEAABmiBAAwAwRAgCYIUIAADP/H58oiUAKVMCfAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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DBECAJghQgAAM0QIAGCGCAEAzBAhAIAZIgQAMEOEAABmuIEpctKFU6dSmvuj+895zzz81lzvmaNzf+I9k4qTF86mNFf25t96z3y16rfeM+58h/cMcgtXQgAAM0QIAGCGCAEAzBAhAIAZIgQAMEOEAABmiBAAwAwRAgCYIUIAADNECABghggBAMwQIQCAGW5gipw09I/CKc2deHiC98ymW59LYU83pTDj76FlK1OaG7+r2XvGpbQnDHZcCQEAzBAhAIAZIgQAMEOEAABmiBAAwAwRAgCYIUIAADNECABghggBAMwQIQCAGSIEADBDhAAAZriBKQY8VzbZe+aDe0eltK/3H/q7FKZuzM1IgVzElRAAwAwRAgCY8Y7Qnj17NH/+fBUVFSkQCGj79u1Jry9dulSBQCDpMX369HStFwCQQ7wj1Nvbq8mTJ6uuru4zt5k3b57a29sTj507d36hRQIAcpP3BxMqKytVWVnZ7zbBYFCRSCTlRQEABoeMvCfU0NCggoICjR8/XsuWLVNnZ+dnbhuPxxWLxZIeAIDBIe0Rqqys1JYtW7R79249//zzam5u1p133ql4PH7N7WtraxUOhxOP4uLidC8JADBApf17QosXL0789cSJEzV16lSVlJRox44dWrRo0VXbr1q1StXV1YmfY7EYIQKAQSLjX1aNRqMqKSlRS0vLNV8PBoMKBoOZXgYAYADK+PeEurq61NbWpmg0muldAQCyjPeV0OnTp3Xs2LHEz62trTp48KDy8/OVn5+vmpoa3XfffYpGo/roo4/0gx/8QGPGjNG9996b1oUDALKfd4TeffddzZkzJ/Hz5fdzlixZog0bNujw4cPavHmzPv30U0WjUc2ZM0fbtm1TKBRK36oBADkh4Jxz1ov4Q7FYTOFwWOVaoGGB4dbLQbpN/4b3yAeP+L9n+MHdL3rPpOprv6jynrml4aL3zN//t//qPXPmYmpv+z717e96zwSafpvSvpB7+tx5Neh1dXd3Ky8vr99tuXccAMAMEQIAmCFCAAAzRAgAYIYIAQDMECEAgBkiBAAwQ4QAAGaIEADADBECAJghQgAAM0QIAGCGCAEAzGT8N6sid537i6neM+P/4xHvmf91y17vmY/7znrPSNLd//0p75nxzx30nrl45oz3zF9U/q33zM55671nJGlYV6/3zIWU9oTBjishAIAZIgQAMEOEAABmiBAAwAwRAgCYIUIAADNECABghggBAMwQIQCAGSIEADBDhAAAZogQAMAMNzCFLs78s5Tm/suLG7xn/myE/5971nT6r+8fl33De0aSbn23yXvmYkp78hd+z///rkX3BFLa16d/OsZ7JnT0WEr7wuDGlRAAwAwRAgCYIUIAADNECABghggBAMwQIQCAGSIEADBDhAAAZogQAMAMEQIAmCFCAAAzRAgAYIYbmOaYIaGQ98zf/P32lPaVys1I98f993Nw8TjvGffBP/nvaIDLf8//4J13qd1etWOG854JbUtpVxjkuBICAJghQgAAM0QIAGCGCAEAzBAhAIAZIgQAMEOEAABmiBAAwAwRAgCYIUIAADNECABghggBAMxwA9Mc88nCid4z9/2rhpT29XHfWe+Z//A3K7xnhnxwwHsmF33y9aD3zFAFUtrXLbtTGgO8cSUEADBDhAAAZrwiVFtbq9tvv12hUEgFBQVauHChjh49mrSNc041NTUqKirSyJEjVV5eriNHjqR10QCA3OAVocbGRlVVVWnfvn2qr69XX1+fKioq1Nvbm9jm2Wef1bp161RXV6fm5mZFIhHNnTtXPT09aV88ACC7eX0w4c0330z6eePGjSooKND+/fs1a9YsOee0fv16rV69WosWLZIkbdq0SYWFhdq6daseffTR9K0cAJD1vtB7Qt3d3ZKk/Px8SVJra6s6OjpUUVGR2CYYDGr27Nlqamq65t8jHo8rFoslPQAAg0PKEXLOqbq6WjNmzNDEiZc+FtzR0SFJKiwsTNq2sLAw8dqVamtrFQ6HE4/i4uJUlwQAyDIpR2j58uU6dOiQXn755ateCwSSv5vgnLvquctWrVql7u7uxKOtrS3VJQEAskxKX1ZdsWKF3njjDe3Zs0djx45NPB+JRCRduiKKRqOJ5zs7O6+6OrosGAwqGPT/Eh4AIPt5XQk557R8+XK9+uqr2r17t0pLS5NeLy0tVSQSUX19feK5c+fOqbGxUWVlZelZMQAgZ3hdCVVVVWnr1q16/fXXFQqFEu/zhMNhjRw5UoFAQCtXrtTatWs1btw4jRs3TmvXrtWoUaP00EMPZeQfAACQvbwitGHDBklSeXl50vMbN27U0qVLJUlPPfWUzp49q8cff1ynTp3StGnT9NZbbykUCqVlwQCA3OEVIefcdbcJBAKqqalRTU1NqmvCDXbeXUhpbvGa73vP/HHjOyntC1L3bX3eM++dvymlfY167TcpzQG+uHccAMAMEQIAmCFCAAAzRAgAYIYIAQDMECEAgBkiBAAwQ4QAAGaIEADADBECAJghQgAAM0QIAGCGCAEAzKT0m1WRW+LO/+7MkvTHPxu4d8QeMmpUaoN/cqv3iBs53Hvmzzc2ec+8EFrnPXP3vse9ZyTpSzqU0hzgiyshAIAZIgQAMEOEAABmiBAAwAwRAgCYIUIAADNECABghggBAMwQIQCAGSIEADBDhAAAZogQAMAMNzCFRg3xvwGnJH38Pyb4D+0Pe4+M/fPj3jNFoz/1npGkF4u3pDTn67mur3vPPPzvnvSe+dIr+7xngBuJKyEAgBkiBAAwQ4QAAGaIEADADBECAJghQgAAM0QIAGCGCAEAzBAhAIAZIgQAMEOEAABmiBAAwAw3MM0x4X854z1z268eTWlfR+96yX9ouv/Iv++c4j3zi4P+M5I0/v2ves+EDwS9Z4q2HvWeCZ3kZqTIPVwJAQDMECEAgBkiBAAwQ4QAAGaIEADADBECAJghQgAAM0QIAGCGCAEAzBAhAIAZIgQAMEOEAABmuIFpjgk0/dZ7ZlxTavu6R6ndJPRGGK/91kvo1wXrBQADBFdCAAAzRAgAYMYrQrW1tbr99tsVCoVUUFCghQsX6ujR5N+LsnTpUgUCgaTH9Okp/BIZAEDO84pQY2OjqqqqtG/fPtXX16uvr08VFRXq7e1N2m7evHlqb29PPHbu3JnWRQMAcoPXBxPefPPNpJ83btyogoIC7d+/X7NmzUo8HwwGFYlE0rNCAEDO+kLvCXV3d0uS8vPzk55vaGhQQUGBxo8fr2XLlqmzs/Mz/x7xeFyxWCzpAQAYHFKOkHNO1dXVmjFjhiZOnJh4vrKyUlu2bNHu3bv1/PPPq7m5WXfeeafi8fg1/z61tbUKh8OJR3FxcapLAgBkmYBzzqUyWFVVpR07dmjv3r0aO3bsZ27X3t6ukpISvfLKK1q0aNFVr8fj8aRAxWIxFRcXq1wLNCwwPJWlAQAM9bnzatDr6u7uVl5eXr/bpvRl1RUrVuiNN97Qnj17+g2QJEWjUZWUlKilpeWarweDQQWDwVSWAQDIcl4Rcs5pxYoVeu2119TQ0KDS0tLrznR1damtrU3RaDTlRQIAcpPXe0JVVVX6+c9/rq1btyoUCqmjo0MdHR06e/asJOn06dN68skn9c477+ijjz5SQ0OD5s+frzFjxujee+/NyD8AACB7eV0JbdiwQZJUXl6e9PzGjRu1dOlSDR06VIcPH9bmzZv16aefKhqNas6cOdq2bZtCoVDaFg0AyA3e/zmuPyNHjtSuXbu+0IIAAIMH944DAJghQgAAM0QIAGCGCAEAzBAhAIAZIgQAMEOEAABmiBAAwAwRAgCYIUIAADNECABghggBAMwQIQCAGSIEADBDhAAAZogQAMAMEQIAmCFCAAAzRAgAYIYIAQDMECEAgBkiBAAwQ4QAAGaIEADADBECAJgZZr2AKznnJEl9Oi8548UAALz16byk///v8/4MuAj19PRIkvZqp/FKAABfRE9Pj8LhcL/bBNznSdUNdPHiRZ04cUKhUEiBQCDptVgspuLiYrW1tSkvL89ohfY4DpdwHC7hOFzCcbhkIBwH55x6enpUVFSkIUP6f9dnwF0JDRkyRGPHju13m7y8vEF9kl3GcbiE43AJx+ESjsMl1sfheldAl/HBBACAGSIEADCTVREKBoNas2aNgsGg9VJMcRwu4ThcwnG4hONwSbYdhwH3wQQAwOCRVVdCAIDcQoQAAGaIEADADBECAJjJqgi98MILKi0t1U033aQpU6bo17/+tfWSbqiamhoFAoGkRyQSsV5Wxu3Zs0fz589XUVGRAoGAtm/fnvS6c041NTUqKirSyJEjVV5eriNHjtgsNoOudxyWLl161fkxffp0m8VmSG1trW6//XaFQiEVFBRo4cKFOnr0aNI2g+F8+DzHIVvOh6yJ0LZt27Ry5UqtXr1aBw4c0MyZM1VZWanjx49bL+2GmjBhgtrb2xOPw4cPWy8p43p7ezV58mTV1dVd8/Vnn31W69atU11dnZqbmxWJRDR37tzEfQhzxfWOgyTNmzcv6fzYuTO37sHY2Nioqqoq7du3T/X19err61NFRYV6e3sT2wyG8+HzHAcpS84HlyW+9a1vucceeyzpua997Wvu6aefNlrRjbdmzRo3efJk62WYkuRee+21xM8XL150kUjEPfPMM4nnfv/737twOOxefPFFgxXeGFceB+ecW7JkiVuwYIHJeqx0dnY6Sa6xsdE5N3jPhyuPg3PZcz5kxZXQuXPntH//flVUVCQ9X1FRoaamJqNV2WhpaVFRUZFKS0v1wAMP6MMPP7RekqnW1lZ1dHQknRvBYFCzZ88edOeGJDU0NKigoEDjx4/XsmXL1NnZab2kjOru7pYk5efnSxq858OVx+GybDgfsiJCJ0+e1IULF1RYWJj0fGFhoTo6OoxWdeNNmzZNmzdv1q5du/TSSy+po6NDZWVl6urqsl6amcv/+w/2c0OSKisrtWXLFu3evVvPP/+8mpubdeeddyoej1svLSOcc6qurtaMGTM0ceJESYPzfLjWcZCy53wYcHfR7s+Vv9rBOXfVc7mssrIy8deTJk3SHXfcoS9/+cvatGmTqqurDVdmb7CfG5K0ePHixF9PnDhRU6dOVUlJiXbs2KFFixYZriwzli9frkOHDmnv3r1XvTaYzofPOg7Zcj5kxZXQmDFjNHTo0Kv+JNPZ2XnVn3gGk9GjR2vSpElqaWmxXoqZy58O5Ny4WjQaVUlJSU6eHytWrNAbb7yht99+O+lXvwy28+GzjsO1DNTzISsiNGLECE2ZMkX19fVJz9fX16usrMxoVfbi8bjef/99RaNR66WYKS0tVSQSSTo3zp07p8bGxkF9bkhSV1eX2tracur8cM5p+fLlevXVV7V7926VlpYmvT5YzofrHYdrGbDng+GHIry88sorbvjw4e6nP/2pe++999zKlSvd6NGj3UcffWS9tBvmiSeecA0NDe7DDz90+/btc/fcc48LhUI5fwx6enrcgQMH3IEDB5wkt27dOnfgwAH3u9/9zjnn3DPPPOPC4bB79dVX3eHDh92DDz7ootGoi8VixitPr/6OQ09Pj3viiSdcU1OTa21tdW+//ba744473C233JJTx+F73/ueC4fDrqGhwbW3tyceZ86cSWwzGM6H6x2HbDofsiZCzjn34x//2JWUlLgRI0a4b37zm0kfRxwMFi9e7KLRqBs+fLgrKipyixYtckeOHLFeVsa9/fbbTtJVjyVLljjnLn0sd82aNS4SibhgMOhmzZrlDh8+bLvoDOjvOJw5c8ZVVFS4m2++2Q0fPtzdeuutbsmSJe748ePWy06ra/3zS3IbN25MbDMYzofrHYdsOh/4VQ4AADNZ8Z4QACA3ESEAgBkiBAAwQ4QAAGaIEADADBECAJghQgAAM0QIAGCGCAEAzBAhAIAZIgQAMEOEAABm/i98LRo/rKmPiwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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iy/q0KFD2rp1q5qbm7V06VLF43HrpWWEc041NTVatGiRZs6cKWl0ng9DHQcpe86HYXcX7Ru5/kc7OOcGPTeSVVRUJH49a9YsLVy4UFOnTtULL7ygmpoaw5XZG+3nhiStWrUq8euZM2dq7ty5Ki4u1v79+7Vy5UrDlWXGunXr9O677+rNN98c9NpoOh8+6Thky/mQFVdCkydP1tixYwf9n0xXV9eg/+MZTSZNmqRZs2aptbXVeilmrn06kHNjsGg0quLi4hF5fqxfv16vvvqq3njjjaQf/TLazodPOg5DGa7nQ1ZEaMKECZozZ44aGhqSnm9oaFBpaanRquzF43G99957ikaj1ksxU1JSokgkknRuXLp0SU1NTaP63JCk7u5utbe3j6jzwzmndevWad++fTp06JBKSkqSXh8t58PNjsNQhu35YPihCC979uxx48ePdz/84Q/dr371K1ddXe0mTZrkTp8+bb202+app55yjY2N7tSpU+7o0aPui1/8oguFQiP+GPT29rqWlhbX0tLiJLlt27a5lpYW95vf/MY559wzzzzjwuGw27dvnzt+/Lh77LHHXDQadbFYzHjl6XWj49Db2+ueeuopd+TIEdfW1ubeeOMNt3DhQnfXXXeNqOPwta99zYXDYdfY2Og6OjoSj48++iixzWg4H252HLLpfMiaCDnn3Pe+9z1XXFzsJkyY4O69996kjyOOBqtWrXLRaNSNHz/eFRYWupUrV7oTJ05YLyvj3njjDSdp0KOystI5d/VjuZs3b3aRSMQFg0F33333uePHj9suOgNudBw++ugjV15e7u688043fvx4d/fdd7vKykp35swZ62Wn1VB/fklu586diW1Gw/lws+OQTecDP8oBAGAmK94TAgCMTEQIAGCGCAEAzBAhAIAZIgQAMEOEAABmiBAAwAwRAgCYIUIAADNECABghggBAMwQIQCAmf8LpK32Xe2QGswAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "for i in range(16):\n",
    "    plt.subplots()\n",
    "    pyplot.imshow(x[i].reshape(28,28))\n",
    "#x.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 卷积神经网络实现"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# #import torch\n",
    "# import torch.nn as nn\n",
    "# import torch.nn.functional as F\n",
    "# import torch.optim as optim\n",
    "# from torchvision import datasets, transforms\n",
    "\n",
    "# class Net(nn.Module):\n",
    "#     def __init__(self):\n",
    "#         super(Net, self).__init__()\n",
    "#         self.conv1 = nn.Conv2d(in_channels=1, out_channels=100, kernel_size=3, stride=1, padding=0, bias=False)\n",
    "#         self.conv2 = nn.Conv2d(in_channels=100, out_channels=50, kernel_size=3, stride=1, padding=0, bias=False)\n",
    "#         self.fc1 = nn.Linear(in_features=5*5*50, out_features=500)\n",
    "#         self.fc2 = nn.Linear(in_features=500, out_features=10)\n",
    "#     def forward(self, x):\n",
    "#         #x [1, 28, 28]\n",
    "#         x = F.relu(self.conv1(x)) #[100, 26, 26]\n",
    "#         x = F.max_pool2d(x, 2, 2) #[100, 13, 13]\n",
    "#         x = F.relu(self.conv2(x)) #[50, 11, 11]\n",
    "#         x = F.max_pool2d(x, 2, 2) #[50, 5, 5]\n",
    "#         x = x.view(-1, 5*5*50)\n",
    "#         x = F.relu(self.fc1(x))\n",
    "#         x = self.fc2(x)\n",
    "#         return F.log_softmax(x, dim=1)\n",
    "\n",
    "# def train(model, train_loader, optimizer, epoch):\n",
    "#     model.train()\n",
    "#     for data, label in train_loader:\n",
    "#         optimizer.zero_grad()\n",
    "#         pred = model(data)\n",
    "#         loss = F.nll_loss(pred, label)\n",
    "#         loss.backward()\n",
    "#         optimizer.step()\n",
    "#     print(\"loss:\", loss.item())\n",
    "\n",
    "# def test(model, test_loader):\n",
    "#     model.eval()\n",
    "#     correct = 0\n",
    "#     with torch.no_grad(): #验证不需要梯度\n",
    "#         for data, target in test_loader:\n",
    "#             output = model(data)\n",
    "#             pred = output.argmax(dim=1, keepdim=True)\n",
    "#             correct += pred.eq(target.view_as(pred)).sum().item()\n",
    "#         print(\"acc:%f %%\"%(100 * correct / len(test_loader.dataset)))\n",
    "            \n",
    "\n",
    "# #预处理数据\n",
    "# #mnist图片大小为[1,28,28]\n",
    "# batch_size = 64\n",
    "# torch.manual_seed(100)\n",
    "# train_loader = torch.utils.data.DataLoader(\n",
    "#     datasets.MNIST('./mnist_data', train=True, download=True,\n",
    "#                    transform=transforms.Compose([\n",
    "#                        transforms.ToTensor(),\n",
    "#                        transforms.Normalize((0.1307,), (0.3081,))\n",
    "#                    ])),\n",
    "#     batch_size=batch_size, shuffle=True)\n",
    "# test_loader = torch.utils.data.DataLoader(\n",
    "#     datasets.MNIST('./mnist_data', train=False, transform=transforms.Compose([\n",
    "#                        transforms.ToTensor(),\n",
    "#                        transforms.Normalize((0.1307,), (0.3081,)) #对每一个通道进行norm\n",
    "#                    ])),\n",
    "#     batch_size=batch_size, shuffle=True)\n",
    "\n",
    "\n",
    "# lr = 1e-2\n",
    "# momentum = 0.5\n",
    "# model = Net()\n",
    "\n",
    "\n",
    "# epochs = 100\n",
    "# isTrain = False\n",
    "# if(isTrain):\n",
    "#     optimizer = optim.Adam(model.parameters(), lr=lr, momentum=momentum)\n",
    "#     for epoch in range(epochs):\n",
    "#         train(model, train_loader, optimizer, epoch)\n",
    "#         test(model, test_loader)\n",
    "\n",
    "# torch.save(model.state_dict(),\"mnist_cnn0.pt\")\n",
    "# #torch.save(model, \"minist_cnn1.pt\")\n",
    "\n",
    "# isTest = True\n",
    "# if(isTest):\n",
    "#     model.load_state_dict(torch.load(\"mnist_cnn0.pt\"))\n",
    "#     test(model, test_loader)\n",
    "#     #themodel = torch.load(\"minist_cnn1.pt\")\n",
    "#     #test(themodel, test_loader)\n",
    "    "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
